const API_URL = window.location.origin + '/api';
const promptInput = document.getElementById('promptInput');
const tempSlider = document.getElementById('tempSlider');
const tempVal = document.getElementById('tempVal');
const topkSlider = document.getElementById('topkSlider');
const topkVal = document.getElementById('topkVal');
const generateBtn = document.getElementById('generateBtn');
const generate5Btn = document.getElementById('generate5Btn');
const outputArea = document.getElementById('outputArea');
const statusMsg = document.getElementById('statusMsg');
tempSlider.addEventListener('input', () => {
tempVal.textContent = tempSlider.value;
});
topkSlider.addEventListener('input', () => {
topkVal.textContent = topkSlider.value;
});
generateBtn.addEventListener('click', () => generate(1));
generate5Btn.addEventListener('click', () => generate(5));
async function generate(count) {
const prompt = promptInput.value.trim();
const temperature = parseFloat(tempSlider.value);
const top_k = parseInt(topkSlider.value);
outputArea.innerHTML = '';
statusMsg.textContent = 'Генерация...';
statusMsg.className = 'status-msg';
try {
const res = await fetch(`${API_URL}/generate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt,
temperature,
top_k,
num_samples: count
})
});
if (!res.ok) {
const err = await res.json().catch(() => ({}));
throw new Error(err.detail || `Ошибка ${res.status}`);
}
const data = await res.json();
statusMsg.textContent = '';
statusMsg.className = 'status-msg';
data.texts.forEach((text, i) => {
const div = document.createElement('div');
div.className = 'gen-output-item';
if (count > 1) {
div.innerHTML = `#${i + 1}${text}...😱`;
} else {
div.textContent = `${text}...😱`;
}
outputArea.appendChild(div);
});
} catch (err) {
statusMsg.textContent = '❌ Сервер недоступен. Запустите API: python server.py';
statusMsg.className = 'status-msg error';
fallbackGenerate(count, prompt, temperature, top_k);
}
}
function fallbackGenerate(count, prompt, temperature, top_k) {
const templates = [
prompt
? `${prompt} — этот секрет знают единицы`
: 'Этот секрет знают единицы',
prompt
? `${prompt} — врачи в шоке от открытия`
: 'Врачи в шоке от этого открытия',
prompt
? `${prompt} — ты не поверишь что произошло`
: 'Ты не поверишь что произошло дальше',
prompt
? `${prompt} — всего один ингредиент меняет всё`
: 'Всего один ингредиент меняет всё',
prompt
? `${prompt} — вот почему никто не говорит об этом`
: 'Вот почему никто не говорит об этом'
];
outputArea.innerHTML = '';
for (let i = 0; i < count && i < templates.length; i++) {
const div = document.createElement('div');
div.className = 'gen-output-item';
if (count > 1) {
div.innerHTML = `#${i + 1}${templates[i]}...😱`;
} else {
div.textContent = `${templates[i]}...😱`;
}
outputArea.appendChild(div);
}
}
// Example tabs
document.querySelectorAll('.ex-tab').forEach(tab => {
tab.addEventListener('click', () => {
document.querySelectorAll('.ex-tab').forEach(t => t.classList.remove('active'));
document.querySelectorAll('.ex-content').forEach(c => c.classList.remove('active'));
tab.classList.add('active');
document.getElementById('ex-' + tab.dataset.tab).classList.add('active');
});
});