File size: 3,897 Bytes
2892395 25bf9bb 2892395 973db88 2892395 3380f8e 25bf9bb 2892395 973db88 2892395 3380f8e ca40114 2892395 96267f5 ca950c4 2892395 ca950c4 25bf9bb 2892395 065cfda 2892395 96267f5 2892395 96267f5 2892395 96267f5 2892395 25bf9bb 065cfda 2892395 96267f5 2892395 96267f5 2892395 ca950c4 973db88 065cfda 2892395 96267f5 ca950c4 2892395 065cfda ca950c4 25bf9bb 96267f5 2892395 ca950c4 2892395 3380f8e 065cfda 2892395 96267f5 25bf9bb 96267f5 2892395 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
/* static/index.js — AnyCoder front‑end 2025‑07 */
/* 1) Model registry */
const MODELS = [
{name:"Moonshot Kimi‑K2", id:"moonshotai/Kimi-K2-Instruct", provider:"groq"},
{name:"DeepSeek V3", id:"deepseek-ai/DeepSeek-V3-0324"},
{name:"DeepSeek R1", id:"deepseek-ai/DeepSeek-R1-0528"},
{name:"ERNIE‑4.5‑VL", id:"baidu/ERNIE-4.5-VL-424B-A47B-Base-PT"},
{name:"MiniMax M1", id:"MiniMaxAI/MiniMax-M1-80k"},
{name:"Qwen3‑235B‑A22B", id:"Qwen/Qwen3-235B-A22B"},
{name:"Qwen3‑235B‑A22B‑Instruct‑2507", id:"Qwen/Qwen3-235B-A22B-Instruct-2507"},
{name:"Qwen3‑235B‑A22B‑Thinking", id:"Qwen/Qwen3-235B-A22B-Thinking"},
{name:"Qwen3‑Coder‑480B‑A35B", id:"Qwen/Qwen3-Coder-480B-A35B-Instruct"},
{name:"Qwen3‑32B", id:"Qwen/Qwen3-32B"},
{name:"SmolLM3‑3B", id:"HuggingFaceTB/SmolLM3-3B"},
{name:"GLM‑4.1V‑9B‑Thinking", id:"THUDM/GLM-4.1V-9B-Thinking"},
/* premium providers (optional) */
{name:"OpenAI GPT‑4", id:"openai/gpt-4", provider:"openai"},
{name:"Gemini Pro", id:"gemini/pro", provider:"gemini"},
{name:"Fireworks V1", id:"fireworks-ai/fireworks-v1", provider:"fireworks"}
];
/* 2) Language list */
const LANGS = [
"python","c","cpp","markdown","latex","json","html","css","javascript","jinja2",
"typescript","yaml","dockerfile","shell","r","sql","sql-msSQL","sql-mySQL",
"sql-mariaDB","sql-sqlite","sql-cassandra","sql-plSQL","sql-hive","sql-pgSQL",
"sql-gql","sql-gpSQL","sql-sparkSQL","sql-esper"
];
/* 3) DOM helpers */
const $ = s => document.querySelector(s);
const els = {
model: $("#model"), lang: $("#lang"), prompt: $("#prompt"),
file : $("#file"), url: $("#url"), search: $("#search"),
code : $("#code"), prev: $("#preview"), hist: $("#hist"),
gen : $("#gen"), clr: $("#clear")
};
/* 4) Populate selects */
MODELS.forEach(m => els.model.add(new Option(m.name, m.id)));
LANGS .forEach(l => els.lang .add(new Option(l.toUpperCase(), l)));
/* 5) Basic tab switcher */
document.querySelectorAll(".tabs[role=tablist]").forEach(tl => {
tl.addEventListener("click", e => {
if (e.target.role !== "tab") return;
tl.querySelectorAll("[role=tab]").forEach(t =>
t.setAttribute("aria-selected", t===e.target));
tl.parentElement.querySelectorAll("[role=tabpanel]").forEach(p =>
p.hidden = p.id !== e.target.getAttribute("aria-controls"));
});
});
/* 6) Clear */
els.clr.onclick = () => {
els.prompt.value=""; els.file.value=""; els.url.value="";
els.code.textContent=""; els.prev.srcdoc=""; els.hist.innerHTML="";
};
/* 7) History helper */
const addHist = text => {
const li=document.createElement("li");
li.textContent = `${new Date().toLocaleTimeString()} – ${text.slice(0,40)}…`;
els.hist.prepend(li);
};
/* 8) Generate → POST /run/predict */
els.gen.onclick = async () => {
const prompt = els.prompt.value.trim();
if (!prompt) { alert("Enter a prompt first."); return; }
els.gen.disabled = true; els.gen.textContent = "Generating…";
// optional file upload
let file_path=null;
if (els.file.files.length) {
const fd=new FormData(); fd.append("file", els.file.files[0]);
const up=await fetch("/upload",{method:"POST", body:fd});
file_path=(await up.json()).file;
}
const payload = {
prompt,
model_id : els.model.value,
language : els.lang.value,
enable_search: els.search.checked,
website_url : els.url.value || null,
file_path
};
try {
const r = await fetch("/run/predict", {
method:"POST",
headers:{ "Content-Type":"application/j
|