mundogiru-agent 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -95,6 +95,14 @@ export function defaultModelFor(provider) {
95
95
  return "llama-3.3-70b-versatile";
96
96
  case "ollama":
97
97
  return "llama3.2";
98
+ case "opencode-go":
99
+ return "kimi-k2.6";
100
+ case "openrouter":
101
+ return "openai/gpt-4o-mini";
102
+ case "minimax":
103
+ return "MiniMax-M1";
104
+ case "deepseek":
105
+ return "deepseek-chat";
98
106
  }
99
107
  }
100
108
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
package/dist/core/llm.js CHANGED
@@ -99,43 +99,33 @@ class OpenAIStyleClient {
99
99
  };
100
100
  }
101
101
  }
102
- // ---------- Ollama (local, sin API key) ----------
103
- class OllamaClient {
104
- model;
105
- baseUrl;
106
- provider = "ollama";
107
- constructor(model, baseUrl) {
108
- this.model = model;
109
- this.baseUrl = baseUrl;
110
- }
111
- async chat(messages) {
112
- const res = await fetch(`${this.baseUrl.replace(/\/$/, "")}/api/chat`, {
113
- method: "POST",
114
- headers: { "content-type": "application/json" },
115
- body: JSON.stringify({
116
- model: this.model,
117
- stream: false,
118
- messages: messages.map((m) => ({ role: m.role, content: m.content })),
119
- }),
120
- });
121
- if (!res.ok) {
122
- throw new HttpError(res.status, `Ollama ${res.status}: ${await res.text()}`);
123
- }
124
- const json = (await res.json());
125
- return { content: json.message?.content ?? "" };
126
- }
127
- }
128
102
  // ---------- factoría ----------
103
+ const PROVIDER_ENDPOINTS = {
104
+ openai: "https://api.openai.com/v1",
105
+ groq: "https://api.groq.com/openai/v1",
106
+ "opencode-go": "https://api.opencode.ai/v1",
107
+ openrouter: "https://openrouter.ai/api/v1",
108
+ minimax: "https://api.minimax.chat/v1",
109
+ deepseek: "https://api.deepseek.com/v1",
110
+ };
129
111
  export function buildLLMClient(config) {
130
112
  switch (config.llmProvider) {
131
113
  case "anthropic":
132
114
  return new AnthropicClient(config.llmModel, config.apiKey);
115
+ case "ollama": {
116
+ // Ollama expone API OpenAI-compatible en /v1. No requiere API key real
117
+ // (acepta cualquier string como bearer).
118
+ const base = (config.ollamaBaseUrl ?? "http://localhost:11434").replace(/\/$/, "");
119
+ const baseUrl = base.endsWith("/v1") ? base : `${base}/v1`;
120
+ return new OpenAIStyleClient("ollama", config.llmModel, config.apiKey || "ollama", baseUrl);
121
+ }
133
122
  case "openai":
134
- return new OpenAIStyleClient("openai", config.llmModel, config.apiKey, "https://api.openai.com/v1");
135
123
  case "groq":
136
- return new OpenAIStyleClient("groq", config.llmModel, config.apiKey, "https://api.groq.com/openai/v1");
137
- case "ollama":
138
- return new OllamaClient(config.llmModel, config.ollamaBaseUrl ?? "http://localhost:11434");
124
+ case "opencode-go":
125
+ case "openrouter":
126
+ case "minimax":
127
+ case "deepseek":
128
+ return new OpenAIStyleClient(config.llmProvider, config.llmModel, config.apiKey, PROVIDER_ENDPOINTS[config.llmProvider]);
139
129
  }
140
130
  }
141
131
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/core/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/core/llm.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,MAAM,SAAU,SAAQ,KAAK;IACG;IAA5B,YAA4B,MAAc,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QADS,WAAM,GAAN,MAAM,CAAQ;QAEtC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC5B,CAAC;CACJ;AAED,SAAS,WAAW,CAAC,QAAsB;IACvC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;;YAChD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC;AAED,kCAAkC;AAElC,MAAM,eAAe;IAEW;IAAgC;IADnD,QAAQ,GAAgB,WAAW,CAAC;IAC7C,YAA4B,KAAa,EAAmB,MAAc;QAA9C,UAAK,GAAL,KAAK,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE9E,KAAK,CAAC,IAAI,CAAC,QAAsB;QAC7B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,mBAAmB,EAAE,YAAY;aACpC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,MAAM,IAAI,SAAS;gBAC3B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACpE,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK;YAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;YACpD,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC1C,CAAC;CACJ;AAED,uDAAuD;AAEvD,MAAM,iBAAiB;IAEC;IACA;IACC;IACA;IAJrB,YACoB,QAAqB,EACrB,KAAa,EACZ,MAAc,EACd,OAAe;QAHhB,aAAQ,GAAR,QAAQ,CAAa;QACrB,UAAK,GAAL,KAAK,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAQ;IACjC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,QAAsB;QAC7B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrE,UAAU,EAAE,IAAI;aACnB,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;QACF,OAAO;YACH,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC/C,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY;SACxC,CAAC;IACN,CAAC;CACJ;AAED,iCAAiC;AAEjC,MAAM,kBAAkB,GAAiE;IACrF,MAAM,EAAE,2BAA2B;IACnC,IAAI,EAAE,gCAAgC;IACtC,aAAa,EAAE,4BAA4B;IAC3C,UAAU,EAAE,8BAA8B;IAC1C,OAAO,EAAE,6BAA6B;IACtC,QAAQ,EAAE,6BAA6B;CAC1C,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAuB;IAClD,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC;QACzB,KAAK,WAAW;YACZ,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/D,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,uEAAuE;YACvE,yCAAyC;YACzC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,wBAAwB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;YAC3D,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChG,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,aAAa,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACX,OAAO,IAAI,iBAAiB,CACxB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,MAAM,EACb,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CACzC,CAAC;IACV,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IAGO;IAFpB,QAAQ,GAAgB,WAAW,CAAC;IACpC,KAAK,GAAG,MAAM,CAAC;IACxB,YAA6B,SAA0C;QAA1C,cAAS,GAAT,SAAS,CAAiC;IAAG,CAAC;IAC3E,KAAK,CAAC,IAAI,CAAC,QAAsB;QAC7B,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACjF,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACxE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,EAAE,OAAO,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC5E,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mundogiru-agent",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Agente IA local Mundo G.I.R.U — para usuarios no técnicos. npx mundogiru-agent.",
5
5
  "license": "MIT",
6
6
  "author": "iaflashelite.com",
@@ -30,10 +30,12 @@ input:focus, select:focus { border-color:var(--accent); }
30
30
  .btn-ghost { background:transparent; color:var(--fg); }
31
31
  .btn-ghost:hover { background:#0b1220; }
32
32
  .row { display:flex; justify-content:space-between; align-items:center; margin-top:24px; }
33
- .providers { display:grid; grid-template-columns:repeat(2, 1fr); gap:10px; margin-top:8px; }
33
+ .providers { display:grid; grid-template-columns:repeat(2, 1fr); gap:10px; margin:6px 0 18px; }
34
34
  .provider-pill { padding:14px; background:#0b1220; border:1px solid var(--border);
35
- border-radius:10px; text-align:center; cursor:pointer; font-weight:600; }
35
+ border-radius:10px; text-align:center; cursor:pointer; font-weight:600; font-size:14px; }
36
36
  .provider-pill.active { border-color:var(--accent); color:var(--accent); }
37
+ .section-title { font-size:13px; font-weight:700; margin-top:16px; }
38
+ .section-desc { font-size:12px; color:var(--muted); margin-bottom:6px; }
37
39
  .error { color:#f87171; font-size:13px; margin-top:10px; min-height:18px; }
38
40
  .success { padding:14px; background:#064e3b; border:1px solid #10b981; border-radius:10px;
39
41
  color:#a7f3d0; margin-top:8px; }
@@ -6,20 +6,69 @@
6
6
  const state = {
7
7
  step: 0,
8
8
  userName: "",
9
- llmProvider: "anthropic",
10
- llmModel: "",
9
+ llmProvider: "opencode-go",
10
+ llmModel: "kimi-k2.6",
11
11
  apiKey: "",
12
12
  ollamaBaseUrl: "http://localhost:11434",
13
13
  agentName: "Mundo",
14
14
  };
15
15
 
16
+ // section: subscription | api | local
16
17
  const PROVIDERS = [
17
- { id: "anthropic", label: "Anthropic (Claude)", defaultModel: "claude-sonnet-4-6", needsKey: true },
18
- { id: "openai", label: "OpenAI (GPT)", defaultModel: "gpt-4o-mini", needsKey: true },
19
- { id: "groq", label: "Groq (Llama rápido)", defaultModel: "llama-3.3-70b-versatile", needsKey: true },
20
- { id: "ollama", label: "Ollama (local, gratis)", defaultModel: "llama3.2", needsKey: false },
18
+ {
19
+ id: "opencode-go", label: "OpenCode Go", section: "subscription",
20
+ models: ["kimi-k2.6", "kimi-k2"], needsKey: true,
21
+ help: "Suscripción mensual. Consigue tu key en opencode.ai/go.",
22
+ },
23
+ {
24
+ id: "openrouter", label: "OpenRouter", section: "subscription",
25
+ models: ["openai/gpt-4o-mini", "anthropic/claude-3.5-sonnet", "meta-llama/llama-3.3-70b-instruct"],
26
+ needsKey: true,
27
+ help: "Suscripción/pago por uso. Consigue tu key en openrouter.ai/keys.",
28
+ },
29
+ {
30
+ id: "minimax", label: "MiniMax", section: "api",
31
+ models: ["MiniMax-M1", "abab6.5-chat"], needsKey: true,
32
+ help: "Pago por uso. Consigue tu key en api.minimax.chat → consola.",
33
+ },
34
+ {
35
+ id: "deepseek", label: "DeepSeek", section: "api",
36
+ models: ["deepseek-chat", "deepseek-reasoner"], needsKey: true,
37
+ help: "Pago por uso. Consigue tu key en platform.deepseek.com/api_keys.",
38
+ },
39
+ {
40
+ id: "anthropic", label: "Anthropic (Claude)", section: "api",
41
+ models: ["claude-sonnet-4-6", "claude-opus-4-6", "claude-haiku-4-5"], needsKey: true,
42
+ help: "Pago por uso. Consigue tu key en console.anthropic.com → API Keys.",
43
+ },
44
+ {
45
+ id: "openai", label: "OpenAI (GPT)", section: "api",
46
+ models: ["gpt-4o-mini", "gpt-4o", "gpt-4-turbo"], needsKey: true,
47
+ help: "Pago por uso. Consigue tu key en platform.openai.com/api-keys.",
48
+ },
49
+ {
50
+ id: "groq", label: "Groq (Llama rápido)", section: "api",
51
+ models: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant", "mixtral-8x7b-32768"],
52
+ needsKey: true,
53
+ help: "Pago por uso (free tier amplio). Consigue tu key en console.groq.com/keys.",
54
+ },
55
+ {
56
+ id: "ollama", label: "Ollama (local, gratis)", section: "local",
57
+ models: ["llama3.2", "llama3.1", "mistral", "phi3"], needsKey: false,
58
+ help: "100% gratis. Requiere tener Ollama instalado (ollama.com/download).",
59
+ },
21
60
  ];
22
61
 
62
+ const SECTION_META = {
63
+ subscription: { title: "💳 Suscripción mensual", desc: "Una cuota fija al mes." },
64
+ api: { title: "🔑 Pago por uso (API key)", desc: "Pagas solo lo que consumes." },
65
+ local: { title: "🖥️ Local gratis", desc: "Corre en tu Mac. Cero coste, sin internet." },
66
+ };
67
+
68
+ function currentProvider() {
69
+ return PROVIDERS.find(function (p) { return p.id === state.llmProvider; });
70
+ }
71
+
23
72
  const root = document.getElementById("container");
24
73
 
25
74
  function render() {
@@ -64,29 +113,47 @@
64
113
  }
65
114
 
66
115
  function renderStep1() {
67
- const pills = PROVIDERS.map(function (p) {
68
- const cls = p.id === state.llmProvider ? "provider-pill active" : "provider-pill";
69
- return `<div class="${cls}" data-id="${p.id}">${p.label}</div>`;
116
+ function pillsForSection(section) {
117
+ return PROVIDERS
118
+ .filter(function (p) { return p.section === section; })
119
+ .map(function (p) {
120
+ const cls = p.id === state.llmProvider ? "provider-pill active" : "provider-pill";
121
+ return `<div class="${cls}" data-id="${p.id}">${p.label}</div>`;
122
+ }).join("");
123
+ }
124
+ function sectionBlock(key) {
125
+ const meta = SECTION_META[key];
126
+ return `
127
+ <div class="section-title">${meta.title}</div>
128
+ <div class="section-desc">${meta.desc}</div>
129
+ <div class="providers">${pillsForSection(key)}</div>
130
+ `;
131
+ }
132
+ const current = currentProvider();
133
+ const modelOptions = current.models.map(function (m) {
134
+ const sel = m === state.llmModel ? " selected" : "";
135
+ return `<option value="${m}"${sel}>${m}</option>`;
70
136
  }).join("");
71
- const current = PROVIDERS.find(function (p) { return p.id === state.llmProvider; });
72
- const needsKey = current.needsKey;
73
- const ollamaInput = !needsKey ? `
137
+ const ollamaInput = !current.needsKey ? `
74
138
  <label>URL de Ollama</label>
75
139
  <input id="ollamaBaseUrl" value="${state.ollamaBaseUrl}" />
76
- <div class="hint">Por defecto Ollama escucha en http://localhost:11434.</div>
140
+ <div class="hint">Ollama suele escuchar en http://localhost:11434. Usamos la API compatible OpenAI (/v1).</div>
77
141
  ` : "";
78
- const keyInput = needsKey ? `
142
+ const keyInput = current.needsKey ? `
79
143
  <label>API key</label>
80
144
  <input id="apiKey" type="password" placeholder="sk-..." value="${state.apiKey}" />
81
- <div class="hint">La key se cifra antes de guardarse en disco.</div>
82
- ` : "";
145
+ <div class="hint">${current.help} La key se cifra antes de guardarse en disco.</div>
146
+ ` : `<div class="hint">${current.help}</div>`;
147
+
83
148
  root.innerHTML = `
84
149
  <div class="step-tag">Paso 2 de 4</div>
85
150
  <h1>Elige tu motor de IA</h1>
86
- <p class="muted">Puedes cambiarlo más tarde.</p>
87
- <div class="providers">${pills}</div>
151
+ <p class="muted">Puedes cambiarlo más tarde desde el chat.</p>
152
+ ${sectionBlock("subscription")}
153
+ ${sectionBlock("api")}
154
+ ${sectionBlock("local")}
88
155
  <label>Modelo</label>
89
- <input id="llmModel" value="${state.llmModel || current.defaultModel}" />
156
+ <select id="llmModel">${modelOptions}</select>
90
157
  ${keyInput}${ollamaInput}
91
158
  <div class="error" id="error"></div>
92
159
  <div class="row">
@@ -97,15 +164,14 @@
97
164
  document.querySelectorAll(".provider-pill").forEach(function (el) {
98
165
  el.onclick = function () {
99
166
  state.llmProvider = el.getAttribute("data-id");
100
- const p = PROVIDERS.find(function (x) { return x.id === state.llmProvider; });
101
- state.llmModel = p.defaultModel;
167
+ state.llmModel = currentProvider().models[0];
102
168
  render();
103
169
  };
104
170
  });
105
171
  document.getElementById("back").onclick = function () { state.step = 0; render(); };
106
172
  document.getElementById("next").onclick = function () {
107
- const provider = PROVIDERS.find(function (p) { return p.id === state.llmProvider; });
108
- state.llmModel = document.getElementById("llmModel").value.trim() || provider.defaultModel;
173
+ const provider = currentProvider();
174
+ state.llmModel = document.getElementById("llmModel").value || provider.models[0];
109
175
  if (provider.needsKey) {
110
176
  const key = document.getElementById("apiKey").value.trim();
111
177
  if (!key) return showError("Falta la API key.");