92 lines
4.2 KiB
JavaScript
92 lines
4.2 KiB
JavaScript
// AI-функции (линтер, генерация, объяснение)
|
||
|
||
async function aiCheck(codeId, langId, resultId) {
|
||
var code = document.getElementById(codeId).value.trim();
|
||
var lang = (document.getElementById(langId) ? document.getElementById(langId).value : '') || 'python';
|
||
var resEl = document.getElementById(resultId);
|
||
if (!code) { resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.textContent = 'Введите код для проверки.'; return; }
|
||
var btnId = codeId === 'c-code' ? 'c-ai-btn' : 'e-ai-btn';
|
||
var btn = document.getElementById(btnId);
|
||
btn.disabled = true;
|
||
btn.textContent = '⏳ Проверяю...';
|
||
resEl.style.display = 'block';
|
||
resEl.style.background = 'var(--bg-alt)';
|
||
resEl.style.color = 'var(--fg)';
|
||
resEl.textContent = 'Проверяю код линтером...';
|
||
try {
|
||
var data = await requestJSON(API_BASE + '/ai/check', 'POST', { language: lang, code: code });
|
||
resEl.style.background = data.ok ? '#1a3a1a' : '#3a1a1a';
|
||
resEl.style.color = data.ok ? '#8f8' : '#f88';
|
||
resEl.textContent = data.result || '(пустой ответ)';
|
||
} catch (e) {
|
||
resEl.style.background = '#3a2a00';
|
||
resEl.style.color = '#ffa';
|
||
resEl.textContent = 'Ошибка: ' + e.message;
|
||
} finally {
|
||
btn.disabled = false;
|
||
btn.textContent = '🔍 Проверить синтаксис линтером';
|
||
}
|
||
}
|
||
|
||
function showGenPrompt() {
|
||
var el = document.getElementById('c-gen-prompt');
|
||
el.style.display = 'flex';
|
||
document.getElementById('c-gen-desc').focus();
|
||
}
|
||
|
||
async function aiGenerate() {
|
||
var name = (document.getElementById('c-name').value || '').trim() || 'my-func';
|
||
var lang = document.getElementById('c-lang').value || 'python';
|
||
var desc = (document.getElementById('c-gen-desc').value || '').trim();
|
||
if (!desc) { document.getElementById('c-gen-desc').focus(); return; }
|
||
var btn = document.getElementById('c-gen-btn');
|
||
var resEl = document.getElementById('c-ai-result');
|
||
btn.disabled = true; btn.textContent = '⏳ Генерирую...';
|
||
resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.style.color = 'var(--fg)';
|
||
resEl.textContent = 'Запрашиваю у LLM...';
|
||
try {
|
||
var d = await requestJSON('/console/api/ai/ask', 'POST', {
|
||
mode: 'codegen',
|
||
language: lang,
|
||
name: name,
|
||
description: desc
|
||
});
|
||
var code = (d.answer || '').replace(/^```[\w]*\n?/, '').replace(/\n?```$/, '');
|
||
document.getElementById('c-code').value = addLLMWarning(code, lang);
|
||
document.getElementById('c-gen-prompt').style.display = 'none';
|
||
resEl.style.background = '#1a3a1a'; resEl.style.color = '#8f8';
|
||
resEl.textContent = 'Код сгенерирован и вставлен.';
|
||
} catch (e) {
|
||
resEl.style.background = '#3a2a00'; resEl.style.color = '#ffa';
|
||
resEl.textContent = 'Ошибка: ' + e.message;
|
||
} finally {
|
||
btn.disabled = false; btn.textContent = '✨ Сгенерировать код LLM';
|
||
}
|
||
}
|
||
|
||
async function aiExplain(codeId, langId, resultId) {
|
||
var code = (document.getElementById(codeId).value || '').trim();
|
||
var lang = (document.getElementById(langId) ? document.getElementById(langId).value : '') || 'python';
|
||
var resEl = document.getElementById(resultId);
|
||
var btnId = codeId === 'c-code' ? 'c-exp-btn' : 'e-exp-btn';
|
||
var btn = document.getElementById(btnId);
|
||
if (!code) { resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.textContent = 'Введите код.'; return; }
|
||
btn.disabled = true; btn.textContent = '⏳ Объясняю...';
|
||
resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.style.color = 'var(--fg)';
|
||
resEl.textContent = 'Запрашиваю у LLM...';
|
||
try {
|
||
var d = await requestJSON('/console/api/ai/ask', 'POST', {
|
||
mode: 'explain',
|
||
language: lang,
|
||
code: code
|
||
});
|
||
resEl.style.background = '#1a2a3a'; resEl.style.color = '#8cf';
|
||
resEl.textContent = d.answer || '(пустой ответ)';
|
||
} catch (e) {
|
||
resEl.style.background = '#3a2a00'; resEl.style.color = '#ffa';
|
||
resEl.textContent = 'Ошибка: ' + e.message;
|
||
} finally {
|
||
btn.disabled = false; btn.textContent = '📖 LLM: Что делает?';
|
||
}
|
||
}
|