@gaunt-sloth/core 2.0.0-alpha.2 → 2.0.0-alpha.21
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.
- package/.gsloth.code.md +10 -0
- package/README.md +6 -6
- package/dist/config/defaults.d.ts +85 -0
- package/dist/config/defaults.js +103 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/jsonc.d.ts +12 -0
- package/dist/config/jsonc.js +41 -0
- package/dist/config/jsonc.js.map +1 -0
- package/dist/config/loader.d.ts +169 -0
- package/dist/config/loader.js +872 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +673 -0
- package/dist/config/schema.js +524 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/shell-policy.d.ts +331 -0
- package/dist/config/shell-policy.js +238 -0
- package/dist/config/shell-policy.js.map +1 -0
- package/dist/config/types.d.ts +596 -0
- package/dist/config/types.js +13 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config.d.ts +18 -647
- package/dist/config.js +15 -516
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +42 -0
- package/dist/constants.js +42 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/GthAbstractAgent.d.ts +85 -2
- package/dist/core/GthAbstractAgent.js +398 -28
- package/dist/core/GthAbstractAgent.js.map +1 -1
- package/dist/core/GthAgentRunner.d.ts +158 -1
- package/dist/core/GthAgentRunner.js +367 -4
- package/dist/core/GthAgentRunner.js.map +1 -1
- package/dist/core/GthLangChainAgent.js +193 -16
- package/dist/core/GthLangChainAgent.js.map +1 -1
- package/dist/core/debugCapture.d.ts +59 -0
- package/dist/core/debugCapture.js +101 -0
- package/dist/core/debugCapture.js.map +1 -0
- package/dist/core/gthLeanAgentFactory.d.ts +9 -0
- package/dist/core/gthLeanAgentFactory.js +10 -0
- package/dist/core/gthLeanAgentFactory.js.map +1 -0
- package/dist/core/plainToolIndication.d.ts +15 -0
- package/dist/core/plainToolIndication.js +148 -0
- package/dist/core/plainToolIndication.js.map +1 -0
- package/dist/core/runStats.d.ts +41 -0
- package/dist/core/runStats.js +73 -0
- package/dist/core/runStats.js.map +1 -0
- package/dist/core/shell/ShellCommandFailedError.d.ts +54 -0
- package/dist/core/shell/ShellCommandFailedError.js +68 -0
- package/dist/core/shell/ShellCommandFailedError.js.map +1 -0
- package/dist/core/shell/allowlist.d.ts +75 -0
- package/dist/core/shell/allowlist.js +187 -0
- package/dist/core/shell/allowlist.js.map +1 -0
- package/dist/core/shell/arity.d.ts +75 -0
- package/dist/core/shell/arity.js +313 -0
- package/dist/core/shell/arity.js.map +1 -0
- package/dist/core/shell/judge.d.ts +161 -0
- package/dist/core/shell/judge.js +261 -0
- package/dist/core/shell/judge.js.map +1 -0
- package/dist/core/shell/normalize.d.ts +27 -0
- package/dist/core/shell/normalize.js +53 -0
- package/dist/core/shell/normalize.js.map +1 -0
- package/dist/core/toolDisplay.d.ts +101 -0
- package/dist/core/toolDisplay.js +374 -0
- package/dist/core/toolDisplay.js.map +1 -0
- package/dist/core/toolOutputChannel.d.ts +68 -0
- package/dist/core/toolOutputChannel.js +112 -0
- package/dist/core/toolOutputChannel.js.map +1 -0
- package/dist/core/types.d.ts +173 -0
- package/dist/core/types.js.map +1 -1
- package/dist/history/historyFormat.d.ts +28 -0
- package/dist/history/historyFormat.js +127 -0
- package/dist/history/historyFormat.js.map +1 -0
- package/dist/history/historyStore.d.ts +198 -0
- package/dist/history/historyStore.js +482 -0
- package/dist/history/historyStore.js.map +1 -0
- package/dist/history/recordSession.d.ts +37 -0
- package/dist/history/recordSession.js +56 -0
- package/dist/history/recordSession.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +1 -1
- package/dist/providers/anthropic.js +5 -10
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/deepseek.d.ts +1 -1
- package/dist/providers/deepseek.js +5 -10
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/geminiSchemaSanitizer.d.ts +52 -0
- package/dist/providers/geminiSchemaSanitizer.js +201 -0
- package/dist/providers/geminiSchemaSanitizer.js.map +1 -0
- package/dist/providers/google-genai.d.ts +1 -1
- package/dist/providers/google-genai.js +9 -11
- package/dist/providers/google-genai.js.map +1 -1
- package/dist/providers/groq.d.ts +1 -1
- package/dist/providers/groq.js +5 -10
- package/dist/providers/groq.js.map +1 -1
- package/dist/providers/huggingface.d.ts +25 -0
- package/dist/providers/huggingface.js +69 -0
- package/dist/providers/huggingface.js.map +1 -0
- package/dist/providers/modelCatalog.d.ts +109 -0
- package/dist/providers/modelCatalog.js +245 -0
- package/dist/providers/modelCatalog.js.map +1 -0
- package/dist/providers/modelDiscovery.d.ts +111 -3
- package/dist/providers/modelDiscovery.js +183 -27
- package/dist/providers/modelDiscovery.js.map +1 -1
- package/dist/providers/ollama.d.ts +19 -5
- package/dist/providers/ollama.js +60 -52
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.js +5 -10
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/openrouter.js +12 -12
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/vertexai.d.ts +1 -1
- package/dist/providers/vertexai.js +9 -11
- package/dist/providers/vertexai.js.map +1 -1
- package/dist/providers/xai.d.ts +1 -1
- package/dist/providers/xai.js +5 -10
- package/dist/providers/xai.js.map +1 -1
- package/dist/runtime/askStructured.d.ts +62 -0
- package/dist/runtime/askStructured.js +76 -0
- package/dist/runtime/askStructured.js.map +1 -0
- package/dist/runtime/conversation.d.ts +59 -0
- package/dist/runtime/conversation.js +137 -0
- package/dist/runtime/conversation.js.map +1 -0
- package/dist/runtime/singleShot.d.ts +24 -5
- package/dist/runtime/singleShot.js +56 -9
- package/dist/runtime/singleShot.js.map +1 -1
- package/dist/utils/aiignoreUtils.js.map +1 -1
- package/dist/utils/binaryOutputUtils.js.map +1 -1
- package/dist/utils/consoleUtils.d.ts +22 -0
- package/dist/utils/consoleUtils.js +45 -0
- package/dist/utils/consoleUtils.js.map +1 -1
- package/dist/utils/debugDump.d.ts +57 -0
- package/dist/utils/debugDump.js +236 -0
- package/dist/utils/debugDump.js.map +1 -0
- package/dist/utils/debugUtils.d.ts +13 -4
- package/dist/utils/debugUtils.js +36 -13
- package/dist/utils/debugUtils.js.map +1 -1
- package/dist/utils/fileUtils.d.ts +24 -2
- package/dist/utils/fileUtils.js +54 -12
- package/dist/utils/fileUtils.js.map +1 -1
- package/dist/utils/llmUtils.js.map +1 -1
- package/dist/utils/redactSecrets.d.ts +63 -0
- package/dist/utils/redactSecrets.js +238 -0
- package/dist/utils/redactSecrets.js.map +1 -0
- package/dist/utils/systemPromptNotes.d.ts +181 -0
- package/dist/utils/systemPromptNotes.js +298 -0
- package/dist/utils/systemPromptNotes.js.map +1 -0
- package/dist/utils/systemUtils.d.ts +32 -1
- package/dist/utils/systemUtils.js +50 -3
- package/dist/utils/systemUtils.js.map +1 -1
- package/dist/utils/toolMatching.d.ts +30 -0
- package/dist/utils/toolMatching.js +44 -0
- package/dist/utils/toolMatching.js.map +1 -0
- package/package.json +17 -8
- package/schema/gsloth-config.schema.json +2111 -0
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* `{ providerId, model }` maps directly onto a `RawGthConfig.llm`.
|
|
25
25
|
*/
|
|
26
26
|
import { availableDefaultConfigs } from '#src/config.js';
|
|
27
|
+
import { CONFIG_SCHEMA_POINTER } from '#src/constants.js';
|
|
27
28
|
import { displayDebug } from '#src/utils/consoleUtils.js';
|
|
28
29
|
import { env } from '#src/utils/systemUtils.js';
|
|
29
30
|
/** Default Ollama host, matching the Ollama CLI/library default. */
|
|
@@ -57,7 +58,7 @@ export const PROVIDER_DESCRIPTORS = [
|
|
|
57
58
|
id: 'anthropic',
|
|
58
59
|
label: 'Anthropic (Claude)',
|
|
59
60
|
apiKeyEnvironmentVariables: ['ANTHROPIC_API_KEY'],
|
|
60
|
-
preferredModels: ['claude-sonnet-
|
|
61
|
+
preferredModels: ['claude-sonnet-5', 'claude-opus-4-8', 'claude-haiku-4-5'],
|
|
61
62
|
discovery: {
|
|
62
63
|
kind: 'anthropic',
|
|
63
64
|
modelsUrl: () => 'https://api.anthropic.com/v1/models',
|
|
@@ -141,7 +142,7 @@ export const PROVIDER_DESCRIPTORS = [
|
|
|
141
142
|
// OPENROUTER_API_KEY is accepted as an alias.
|
|
142
143
|
label: 'OpenRouter',
|
|
143
144
|
apiKeyEnvironmentVariables: ['OPEN_ROUTER_API_KEY', 'OPENROUTER_API_KEY'],
|
|
144
|
-
preferredModels: ['qwen/qwen3-coder', 'anthropic/claude-sonnet-
|
|
145
|
+
preferredModels: ['qwen/qwen3-coder', 'anthropic/claude-sonnet-5', 'openai/gpt-5.5'],
|
|
145
146
|
discovery: {
|
|
146
147
|
kind: 'openai',
|
|
147
148
|
modelsUrl: () => 'https://openrouter.ai/api/v1/models',
|
|
@@ -149,6 +150,19 @@ export const PROVIDER_DESCRIPTORS = [
|
|
|
149
150
|
filter: chatOnly,
|
|
150
151
|
},
|
|
151
152
|
},
|
|
153
|
+
{
|
|
154
|
+
id: 'huggingface',
|
|
155
|
+
label: 'Hugging Face (Inference Providers)',
|
|
156
|
+
apiKeyEnvironmentVariables: ['HF_TOKEN', 'HUGGINGFACEHUB_API_TOKEN', 'HF_API_KEY'],
|
|
157
|
+
preferredModels: ['openai/gpt-oss-120b', 'Qwen/Qwen3-Coder-480B-A35B-Instruct'],
|
|
158
|
+
discovery: {
|
|
159
|
+
kind: 'openai',
|
|
160
|
+
// HF's OpenAI-compatible router exposes /v1/models across all inference providers.
|
|
161
|
+
modelsUrl: () => 'https://router.huggingface.co/v1/models',
|
|
162
|
+
authHeader: bearer,
|
|
163
|
+
filter: chatOnly,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
152
166
|
{
|
|
153
167
|
id: 'ollama',
|
|
154
168
|
label: 'Ollama (local)',
|
|
@@ -196,20 +210,92 @@ export function findApiKeyEnvVar(descriptor) {
|
|
|
196
210
|
* - When `discoveredModels` is omitted, the curated `preferredModels` are
|
|
197
211
|
* returned, all flagged ⭐ preferred.
|
|
198
212
|
* - When provided, every discovered model is listed; those that also appear in
|
|
199
|
-
* the curated `preferredModels` are flagged ⭐ preferred.
|
|
213
|
+
* the curated `preferredModels` are flagged ⭐ preferred. The list is ordered
|
|
214
|
+
* **preferred first** (in curated order, so the recommended default sits on top
|
|
215
|
+
* and is pre-selected), then every other discovered model **alphabetically** —
|
|
216
|
+
* so a large catalog (e.g. OpenRouter's 200+ models) is navigable instead of
|
|
217
|
+
* arriving in the endpoint's arbitrary order.
|
|
200
218
|
*/
|
|
201
219
|
export function buildModelList(descriptor, discoveredModels) {
|
|
202
220
|
if (!discoveredModels) {
|
|
203
221
|
return descriptor.preferredModels.map((id) => ({ id, preferred: true }));
|
|
204
222
|
}
|
|
205
|
-
|
|
206
|
-
//
|
|
207
|
-
|
|
208
|
-
const
|
|
209
|
-
|
|
223
|
+
// Rank a discovered id by its position in the curated list, ignoring an explicit
|
|
224
|
+
// `:latest` suffix so `qwen3` matches `qwen3:latest`; `undefined` = not preferred.
|
|
225
|
+
const preferredRank = new Map(descriptor.preferredModels.map((id, i) => [id, i]));
|
|
226
|
+
const rankOf = (id) => preferredRank.get(id) ?? preferredRank.get(id.replace(/:latest$/, ''));
|
|
227
|
+
const isPreferred = (id) => rankOf(id) !== undefined;
|
|
228
|
+
const ordered = [...discoveredModels].sort((a, b) => {
|
|
229
|
+
const ra = rankOf(a);
|
|
230
|
+
const rb = rankOf(b);
|
|
231
|
+
if (ra !== undefined && rb !== undefined)
|
|
232
|
+
return ra - rb; // both preferred → curated order
|
|
233
|
+
if (ra !== undefined)
|
|
234
|
+
return -1; // preferred sorts before non-preferred
|
|
235
|
+
if (rb !== undefined)
|
|
236
|
+
return 1;
|
|
237
|
+
return a.localeCompare(b); // neither preferred → alphabetical
|
|
238
|
+
});
|
|
239
|
+
return ordered.map((id) => ({ id, preferred: isPreferred(id) }));
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* The single fallback source of truth for a provider's default model id (CFG-14).
|
|
243
|
+
*
|
|
244
|
+
* Returns the top curated ⭐ `preferredModels` entry for the provider — the one
|
|
245
|
+
* id that provider factories fall back to when a config carries no `model`, and
|
|
246
|
+
* the id first-run writes when live discovery is impossible. Centralising it here
|
|
247
|
+
* means the fallback lives in exactly ONE place (the curated registry above)
|
|
248
|
+
* instead of being duplicated as a literal in every `providers/<id>.ts`.
|
|
249
|
+
*
|
|
250
|
+
* Every registered provider is required to carry at least one curated model, so
|
|
251
|
+
* this always resolves for a known id; it throws for an unknown provider or a
|
|
252
|
+
* provider whose `preferredModels` is empty (a developer error — the invariant
|
|
253
|
+
* that the fallback source is complete would otherwise fail silently).
|
|
254
|
+
*
|
|
255
|
+
* @returns the curated default model id (always defined for a known provider).
|
|
256
|
+
*/
|
|
257
|
+
export function getCuratedFallbackModel(providerId) {
|
|
258
|
+
const model = PROVIDER_DESCRIPTORS.find((d) => d.id === providerId)?.preferredModels[0];
|
|
259
|
+
if (!model) {
|
|
260
|
+
throw new Error(`No curated fallback model registered for provider "${providerId}".`);
|
|
261
|
+
}
|
|
262
|
+
return model;
|
|
210
263
|
}
|
|
211
|
-
/**
|
|
264
|
+
/**
|
|
265
|
+
* Build the minimal `.gsloth.config.json` body an `init` template writes for a
|
|
266
|
+
* provider (CFG-14). When `model` is omitted, the `model` key is left OUT of the
|
|
267
|
+
* config entirely, so the provider factory resolves it at run time from
|
|
268
|
+
* {@link getCuratedFallbackModel} — the single curated source that tracks the
|
|
269
|
+
* installed version, rather than a literal frozen into the user's file that 404s
|
|
270
|
+
* once the model is retired.
|
|
271
|
+
*
|
|
272
|
+
* A `$schema` pointer ({@link CONFIG_SCHEMA_POINTER}) is written first so editors offer
|
|
273
|
+
* autocomplete/validation against the shipped JSON Schema (GS2-1). `$schema` is a known,
|
|
274
|
+
* runtime-ignored config field (see the zod schema), so it never affects loading.
|
|
275
|
+
*/
|
|
276
|
+
export function buildInitConfigContent(providerId, model) {
|
|
277
|
+
const llm = { type: providerId };
|
|
278
|
+
if (model)
|
|
279
|
+
llm.model = model;
|
|
280
|
+
return JSON.stringify({ $schema: CONFIG_SCHEMA_POINTER, llm }, null, 2);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Live-fetch timeout for the NON-interactive probes: provider detection's Ollama
|
|
284
|
+
* liveness check and `resolveInitModel`. Short enough to never block for long when
|
|
285
|
+
* a daemon is down or a key is dead — every current caller keeps this default.
|
|
286
|
+
*/
|
|
212
287
|
const DISCOVERY_TIMEOUT_MS = 2000;
|
|
288
|
+
/**
|
|
289
|
+
* CFG-21 — the timeout for the *interactive* first-run model fetch. The dialog is
|
|
290
|
+
* blocking on a human who just picked a provider, so it can afford to wait a lot
|
|
291
|
+
* longer than the background probes for a large cloud catalog (OpenRouter ~300
|
|
292
|
+
* models) to arrive over a cold connection, rather than losing the 2s race and
|
|
293
|
+
* silently dropping to a 3-item curated stub. Threaded per-call so ONLY the dialog
|
|
294
|
+
* uses it — `detectProviders` / `resolveInitModel` stay on the short
|
|
295
|
+
* {@link DISCOVERY_TIMEOUT_MS} probe (a long global would hang the *provider* step
|
|
296
|
+
* whenever the local Ollama daemon is down).
|
|
297
|
+
*/
|
|
298
|
+
export const INTERACTIVE_MODEL_FETCH_TIMEOUT_MS = 12_000;
|
|
213
299
|
/**
|
|
214
300
|
* Parse the `id`s out of a models-endpoint payload. Both the OpenAI-compatible
|
|
215
301
|
* shape and Anthropic's native shape use a top-level `{ data: [{ id }] }`
|
|
@@ -225,28 +311,36 @@ function parseModelIds(body) {
|
|
|
225
311
|
}
|
|
226
312
|
/**
|
|
227
313
|
* Internal: run live discovery for one descriptor, distinguishing a successful
|
|
228
|
-
* live query from a curated fallback
|
|
314
|
+
* live query from a curated fallback and — via {@link ModelDiscoveryStatus} —
|
|
315
|
+
* a by-design curated result from an attempted-and-failed one (CFG-21).
|
|
229
316
|
*
|
|
230
|
-
* @
|
|
231
|
-
*
|
|
232
|
-
*
|
|
317
|
+
* @param options.timeoutMs live-fetch timeout, defaulting to the short
|
|
318
|
+
* {@link DISCOVERY_TIMEOUT_MS} so background probes are unchanged.
|
|
319
|
+
* @returns `{ models, live, status }`. `live` is true only when the models came
|
|
320
|
+
* from a successful, non-empty live `/v1/models` query (kept as the Ollama
|
|
321
|
+
* availability signal). `status` is `live` in that case, `fallback` when a live
|
|
322
|
+
* query was attempted but failed (network/timeout/non-2xx/empty), and `curated`
|
|
323
|
+
* when no live query was attempted (`kind:'none'` or no API key).
|
|
233
324
|
*/
|
|
234
|
-
async function discoverModelsInternal(descriptor) {
|
|
235
|
-
const
|
|
325
|
+
async function discoverModelsInternal(descriptor, options = {}) {
|
|
326
|
+
const timeoutMs = options.timeoutMs ?? DISCOVERY_TIMEOUT_MS;
|
|
327
|
+
const curated = (status) => ({
|
|
236
328
|
models: buildModelList(descriptor),
|
|
237
329
|
live: false,
|
|
330
|
+
status,
|
|
238
331
|
});
|
|
239
332
|
const { discovery } = descriptor;
|
|
240
333
|
if (discovery.kind === 'none' || !discovery.modelsUrl) {
|
|
241
|
-
return curated();
|
|
334
|
+
return curated('curated');
|
|
242
335
|
}
|
|
243
336
|
// Resolve an API key for cloud providers; ollama needs none.
|
|
244
337
|
let key = '';
|
|
245
338
|
if (descriptor.id !== 'ollama') {
|
|
246
339
|
const envVar = findApiKeyEnvVar(descriptor);
|
|
247
340
|
if (!envVar) {
|
|
248
|
-
// No key → don't hit the network; show the curated catalog.
|
|
249
|
-
|
|
341
|
+
// No key → don't hit the network; show the curated catalog. This is the
|
|
342
|
+
// by-design path, NOT a "couldn't reach" degrade — hence `curated`.
|
|
343
|
+
return curated('curated');
|
|
250
344
|
}
|
|
251
345
|
key = env[envVar] ?? '';
|
|
252
346
|
}
|
|
@@ -259,11 +353,11 @@ async function discoverModelsInternal(descriptor) {
|
|
|
259
353
|
const res = await fetch(url, {
|
|
260
354
|
method: 'GET',
|
|
261
355
|
headers,
|
|
262
|
-
signal: AbortSignal.timeout(
|
|
356
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
263
357
|
});
|
|
264
358
|
if (!res.ok) {
|
|
265
359
|
displayDebug(`Model discovery for "${descriptor.id}" returned HTTP ${res.status}.`);
|
|
266
|
-
return curated();
|
|
360
|
+
return curated('fallback');
|
|
267
361
|
}
|
|
268
362
|
const body = await res.json();
|
|
269
363
|
let ids = parseModelIds(body);
|
|
@@ -272,13 +366,13 @@ async function discoverModelsInternal(descriptor) {
|
|
|
272
366
|
}
|
|
273
367
|
if (ids.length === 0) {
|
|
274
368
|
displayDebug(`Model discovery for "${descriptor.id}" returned no usable models.`);
|
|
275
|
-
return curated();
|
|
369
|
+
return curated('fallback');
|
|
276
370
|
}
|
|
277
|
-
return { models: buildModelList(descriptor, ids), live: true };
|
|
371
|
+
return { models: buildModelList(descriptor, ids), live: true, status: 'live' };
|
|
278
372
|
}
|
|
279
373
|
catch (e) {
|
|
280
374
|
displayDebug(`Model discovery for "${descriptor.id}" failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
281
|
-
return curated();
|
|
375
|
+
return curated('fallback');
|
|
282
376
|
}
|
|
283
377
|
}
|
|
284
378
|
/**
|
|
@@ -297,12 +391,12 @@ async function discoverModelsInternal(descriptor) {
|
|
|
297
391
|
* the curated catalog is returned directly. Ollama (no key, local daemon) is
|
|
298
392
|
* always probed.
|
|
299
393
|
*/
|
|
300
|
-
export async function discoverModels(providerId) {
|
|
394
|
+
export async function discoverModels(providerId, options) {
|
|
301
395
|
const descriptor = PROVIDER_DESCRIPTORS.find((d) => d.id === providerId);
|
|
302
396
|
if (!descriptor) {
|
|
303
397
|
throw new Error(`Unknown provider: ${providerId}`);
|
|
304
398
|
}
|
|
305
|
-
const { models } = await discoverModelsInternal(descriptor);
|
|
399
|
+
const { models } = await discoverModelsInternal(descriptor, options);
|
|
306
400
|
return models;
|
|
307
401
|
}
|
|
308
402
|
/**
|
|
@@ -311,9 +405,71 @@ export async function discoverModels(providerId) {
|
|
|
311
405
|
* Live-discovers from the provider's models endpoint where possible (with a
|
|
312
406
|
* curated fallback); returns the curated set for `kind: 'none'` providers. Does
|
|
313
407
|
* not require the provider to be "available".
|
|
408
|
+
*
|
|
409
|
+
* `options.timeoutMs` (CFG-21) overrides the default short live-fetch timeout; the
|
|
410
|
+
* bare `listModels(providerId)` call is unchanged.
|
|
411
|
+
*/
|
|
412
|
+
export async function listModels(providerId, options) {
|
|
413
|
+
return discoverModels(providerId, options);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* CFG-21 — like {@link discoverModels} but also returns the model list's
|
|
417
|
+
* {@link ModelDiscoveryStatus} provenance, so an interactive caller (the first-run
|
|
418
|
+
* dialog) can tell an honest "couldn't reach the provider" degrade (`fallback`)
|
|
419
|
+
* apart from a by-design curated list (`curated`) and a real live catalog (`live`).
|
|
420
|
+
* Kept as a separate export so `listModels` / `discoverModels` keep their existing
|
|
421
|
+
* `(providerId) => ModelInfo[]` signatures other callers rely on.
|
|
422
|
+
*
|
|
423
|
+
* Never throws for a discovery failure (that degrades to `fallback`); it only
|
|
424
|
+
* throws for an unknown provider id, mirroring {@link discoverModels}.
|
|
314
425
|
*/
|
|
315
|
-
export async function
|
|
316
|
-
|
|
426
|
+
export async function discoverModelsWithProvenance(providerId, options) {
|
|
427
|
+
const descriptor = PROVIDER_DESCRIPTORS.find((d) => d.id === providerId);
|
|
428
|
+
if (!descriptor) {
|
|
429
|
+
throw new Error(`Unknown provider: ${providerId}`);
|
|
430
|
+
}
|
|
431
|
+
const { models, status } = await discoverModelsInternal(descriptor, options);
|
|
432
|
+
return { models, status };
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Resolve the model id that `init` should bake into a generated config for a
|
|
436
|
+
* provider (CFG-14) — the safeguard against writing a speculative id that 404s
|
|
437
|
+
* once the model is retired.
|
|
438
|
+
*
|
|
439
|
+
* - **Live discovery possible** (a key / running daemon and a responding
|
|
440
|
+
* `/v1/models` endpoint): returns a *verified-present* id — the highest-ranked
|
|
441
|
+
* curated ⭐ id that is actually in the live list (matched tolerant of an
|
|
442
|
+
* `:latest` suffix), or, when no curated id is live, the first live id.
|
|
443
|
+
* - **Live discovery impossible** (`kind: 'none'`, no key, offline, empty
|
|
444
|
+
* catalog): returns `undefined`. This is the ONLY speculative path, and it
|
|
445
|
+
* deliberately declines to invent a literal: the caller OMITS `model` so the
|
|
446
|
+
* provider factory falls back to {@link getCuratedFallbackModel} at run time
|
|
447
|
+
* (a single curated source that upgrades with the installed version).
|
|
448
|
+
*
|
|
449
|
+
* Never throws — a bad key or network error degrades to `undefined`, mirroring
|
|
450
|
+
* {@link discoverModels}.
|
|
451
|
+
*/
|
|
452
|
+
export async function resolveInitModel(providerId) {
|
|
453
|
+
const descriptor = PROVIDER_DESCRIPTORS.find((d) => d.id === providerId);
|
|
454
|
+
if (!descriptor)
|
|
455
|
+
return undefined;
|
|
456
|
+
const { models, live } = await discoverModelsInternal(descriptor);
|
|
457
|
+
// Not a live catalog → do NOT emit a speculative literal; defer to the run-time
|
|
458
|
+
// curated fallback by omitting `model`.
|
|
459
|
+
if (!live || models.length === 0)
|
|
460
|
+
return undefined;
|
|
461
|
+
// Prefer the highest-ranked curated id that is actually present in the live
|
|
462
|
+
// list, tolerating an explicit `:latest` suffix (so curated `qwen3` matches a
|
|
463
|
+
// live `qwen3:latest`).
|
|
464
|
+
const strip = (id) => id.replace(/:latest$/, '');
|
|
465
|
+
const liveByStripped = new Map(models.map((m) => [strip(m.id), m.id]));
|
|
466
|
+
for (const curated of descriptor.preferredModels) {
|
|
467
|
+
const hit = liveByStripped.get(strip(curated));
|
|
468
|
+
if (hit)
|
|
469
|
+
return hit;
|
|
470
|
+
}
|
|
471
|
+
// No curated id is live → the first live id is still a verified-present choice.
|
|
472
|
+
return models[0].id;
|
|
317
473
|
}
|
|
318
474
|
/**
|
|
319
475
|
* Detect every known provider on this machine and list its models.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelDiscovery.js","sourceRoot":"","sources":["../../src/providers/modelDiscovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"modelDiscovery.js","sourceRoot":"","sources":["../../src/providers/modelDiscovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
import { BaseChatModel,
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { BaseChatModel, BaseChatModelParams } from '@langchain/core/language_models/chat_models';
|
|
2
|
+
import type { ChatOllamaInput } from '@langchain/ollama';
|
|
3
|
+
/**
|
|
4
|
+
* GS2-59 — build a native `ChatOllama` client (`@langchain/ollama`, talking to Ollama's
|
|
5
|
+
* `/api/chat`). This replaces the previous `ChatOpenAI`→`/v1` client, which had two fatal
|
|
6
|
+
* properties for local thinking models: it DROPPED the model's separate reasoning field (the
|
|
7
|
+
* completions converter discards it — `__includeRawResponse` is openrouter-only), and it IGNORED
|
|
8
|
+
* `num_ctx` so a large agentic prompt starved the answer to empty content. `ChatOllama` fixes both:
|
|
9
|
+
* it honors `numCtx`, and it surfaces the model's thinking in `additional_kwargs.reasoning_content`
|
|
10
|
+
* — the exact field the reasoning pipeline (`pickReasoningDelta`) already reads — so the `/reasoning`
|
|
11
|
+
* panel populates with no downstream change.
|
|
12
|
+
*
|
|
13
|
+
* Ollama is a local, unauthenticated daemon, so the old OpenAI-client knobs are gone (2.0 migration
|
|
14
|
+
* note): point elsewhere with `OLLAMA_HOST`; the previous `configuration.baseURL` / placeholder
|
|
15
|
+
* `apiKey` fields no longer apply. If a reverse proxy in front of Ollama needs auth, set `headers`
|
|
16
|
+
* in the config (passed straight through to `ChatOllama`).
|
|
17
|
+
*/
|
|
18
|
+
export declare function processJsonConfig(llmConfig: ChatOllamaInput & BaseChatModelParams): Promise<BaseChatModel>;
|
|
19
|
+
export declare function init(configFileName: string, force?: boolean, model?: string): void;
|
package/dist/providers/ollama.js
CHANGED
|
@@ -1,77 +1,85 @@
|
|
|
1
1
|
import { displayWarning } from '#src/utils/consoleUtils.js';
|
|
2
2
|
import { env } from '#src/utils/systemUtils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { writeConfigFileWithMessages } from '#src/utils/fileUtils.js';
|
|
4
|
+
import { buildInitConfigContent, getCuratedFallbackModel } from '#src/providers/modelDiscovery.js';
|
|
4
5
|
/**
|
|
5
|
-
* Default Ollama daemon host, matching the Ollama CLI/library default.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Default Ollama daemon host, matching the Ollama CLI/library default. GS2-59 — `ChatOllama` talks
|
|
7
|
+
* to the daemon's NATIVE endpoint (`/api/chat`), NOT the OpenAI-compatible `/v1` shim this provider
|
|
8
|
+
* used before. The same root host is reused by `modelDiscovery.ts`'s model picker, which still
|
|
9
|
+
* queries the `/v1/models` surface (discovery only); both derive from this root — they stay in sync
|
|
10
|
+
* at the host level even though the two use different endpoints under it.
|
|
8
11
|
*/
|
|
9
12
|
const DEFAULT_OLLAMA_HOST = 'http://127.0.0.1:11434';
|
|
10
13
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* the
|
|
14
|
+
* GS2-59 — default context window (`num_ctx`) for Ollama models. Ollama's OWN default is 4096, but
|
|
15
|
+
* gaunt-sloth's agentic prompt (system + full lean toolset + a tool result) already lands ~4000
|
|
16
|
+
* tokens; at 4096 a thinking model (e.g. gemma4:31b) spends its entire remaining budget on the
|
|
17
|
+
* reasoning field and emits EMPTY `content` on the turn after a tool executes — the GS2-59
|
|
18
|
+
* blank-answer regression. The previous `ChatOpenAI`→`/v1` path could not fix this because the
|
|
19
|
+
* OpenAI-compat shim IGNORES `num_ctx`; the native `/api/chat` path honors it.
|
|
20
|
+
*
|
|
21
|
+
* 16384 is chosen as the largest window that is BOTH safely above the ~4000-token starvation point
|
|
22
|
+
* (4× headroom for reasoning + a few tool results) AND fits constrained consumer VRAM: Ollama
|
|
23
|
+
* preallocates the KV cache at `num_ctx`, so on a box where a large model already spills partly to
|
|
24
|
+
* CPU (e.g. a 19GB model on ~18GB of GPU), a 32768 cache tips the GPU allocation into an
|
|
25
|
+
* out-of-memory error. 16384 was verified live to run the agentic tool→synthesis turn on such a
|
|
26
|
+
* box; 32768 OOM'd it. Overridable per config via `llm.numCtx` — raise it if you have the VRAM and
|
|
27
|
+
* run long sessions, lower it on very tight hardware. NOTE: a per-request `num_ctx` overrides the
|
|
28
|
+
* daemon's `OLLAMA_CONTEXT_LENGTH`, so a user who tuned their server window higher should set
|
|
29
|
+
* `llm.numCtx` to match rather than rely on the server default.
|
|
19
30
|
*/
|
|
20
|
-
const
|
|
31
|
+
const DEFAULT_OLLAMA_NUM_CTX = 16384;
|
|
21
32
|
/**
|
|
22
|
-
* Resolve the
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* `
|
|
26
|
-
* `host:port`; either form is normalized to a `http(s)://host[:port]/v1` base.
|
|
33
|
+
* Resolve the base URL for the local Ollama daemon — the NATIVE root (no `/v1` suffix; `ChatOllama`
|
|
34
|
+
* appends its own `/api/chat` path). Honors the `OLLAMA_HOST` env override (the same variable the
|
|
35
|
+
* Ollama CLI uses): a full URL (`http://127.0.0.1:11434`) or a bare `host:port` is normalized to
|
|
36
|
+
* `http(s)://host[:port]` with any trailing slash stripped.
|
|
27
37
|
*/
|
|
28
38
|
function resolveBaseUrl() {
|
|
29
39
|
const host = env.OLLAMA_HOST;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
else if (/^https?:\/\//.test(host)) {
|
|
35
|
-
base = host.replace(/\/+$/, '');
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
base = `http://${host}`.replace(/\/+$/, '');
|
|
39
|
-
}
|
|
40
|
-
return `${base}/v1`;
|
|
40
|
+
if (!host)
|
|
41
|
+
return DEFAULT_OLLAMA_HOST;
|
|
42
|
+
const base = /^https?:\/\//.test(host) ? host : `http://${host}`;
|
|
43
|
+
return base.replace(/\/+$/, '');
|
|
41
44
|
}
|
|
42
|
-
|
|
45
|
+
/**
|
|
46
|
+
* GS2-59 — build a native `ChatOllama` client (`@langchain/ollama`, talking to Ollama's
|
|
47
|
+
* `/api/chat`). This replaces the previous `ChatOpenAI`→`/v1` client, which had two fatal
|
|
48
|
+
* properties for local thinking models: it DROPPED the model's separate reasoning field (the
|
|
49
|
+
* completions converter discards it — `__includeRawResponse` is openrouter-only), and it IGNORED
|
|
50
|
+
* `num_ctx` so a large agentic prompt starved the answer to empty content. `ChatOllama` fixes both:
|
|
51
|
+
* it honors `numCtx`, and it surfaces the model's thinking in `additional_kwargs.reasoning_content`
|
|
52
|
+
* — the exact field the reasoning pipeline (`pickReasoningDelta`) already reads — so the `/reasoning`
|
|
53
|
+
* panel populates with no downstream change.
|
|
54
|
+
*
|
|
55
|
+
* Ollama is a local, unauthenticated daemon, so the old OpenAI-client knobs are gone (2.0 migration
|
|
56
|
+
* note): point elsewhere with `OLLAMA_HOST`; the previous `configuration.baseURL` / placeholder
|
|
57
|
+
* `apiKey` fields no longer apply. If a reverse proxy in front of Ollama needs auth, set `headers`
|
|
58
|
+
* in the config (passed straight through to `ChatOllama`).
|
|
59
|
+
*/
|
|
43
60
|
// noinspection JSUnusedGlobalSymbols
|
|
44
61
|
export async function processJsonConfig(llmConfig) {
|
|
45
|
-
const {
|
|
46
|
-
// Ollama is local and unauthenticated; ChatOpenAI still needs a non-empty key.
|
|
47
|
-
const apiKey = llmConfig.apiKey || OLLAMA_PLACEHOLDER_API_KEY;
|
|
62
|
+
const { ChatOllama } = await import('@langchain/ollama');
|
|
48
63
|
const configFields = {
|
|
49
64
|
...llmConfig,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
},
|
|
65
|
+
model: llmConfig.model || getCuratedFallbackModel('ollama'),
|
|
66
|
+
// Precedence: an explicit config `baseUrl` (the native ChatOllama field) wins, else the
|
|
67
|
+
// `OLLAMA_HOST` env, else the local default. Config is the more specific/intentional signal.
|
|
68
|
+
baseUrl: llmConfig.baseUrl ?? resolveBaseUrl(),
|
|
69
|
+
numCtx: llmConfig.numCtx ?? DEFAULT_OLLAMA_NUM_CTX,
|
|
56
70
|
};
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return new
|
|
71
|
+
// Strip OpenAI-client / gaunt-sloth-internal keys ChatOllama neither needs nor understands.
|
|
72
|
+
for (const key of ['type', 'apiKeyEnvironmentVariable', 'apiKey', 'configuration']) {
|
|
73
|
+
delete configFields[key];
|
|
74
|
+
}
|
|
75
|
+
return new ChatOllama(configFields);
|
|
62
76
|
}
|
|
63
|
-
|
|
64
|
-
"llm": {
|
|
65
|
-
"type": "ollama",
|
|
66
|
-
"model": "qwen3-coder"
|
|
67
|
-
}
|
|
68
|
-
}`;
|
|
69
|
-
export function init(configFileName) {
|
|
77
|
+
export function init(configFileName, force = false, model) {
|
|
70
78
|
// Determine which content to use based on file extension
|
|
71
79
|
if (!configFileName.endsWith('.json')) {
|
|
72
80
|
throw new Error('Only JSON config is supported.');
|
|
73
81
|
}
|
|
74
|
-
|
|
82
|
+
writeConfigFileWithMessages(configFileName, buildInitConfigContent('ollama', model), force);
|
|
75
83
|
displayWarning(`You need to edit your ${configFileName} to configure the model. ` +
|
|
76
84
|
'Ollama runs locally and needs no API key; set OLLAMA_HOST if your daemon ' +
|
|
77
85
|
'is not on the default http://127.0.0.1:11434.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAOhD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEnG;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAErC;;;;;GAKG;AACH,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;IAC7B,IAAI,CAAC,IAAI;QAAE,OAAO,mBAAmB,CAAC;IACtC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;IACjE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAgD;IAEhD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACzD,MAAM,YAAY,GAA4B;QAC5C,GAAG,SAAS;QACZ,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,uBAAuB,CAAC,QAAQ,CAAC;QAC3D,wFAAwF;QACxF,6FAA6F;QAC7F,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,cAAc,EAAE;QAC9C,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,sBAAsB;KACnD,CAAC;IACF,4FAA4F;IAC5F,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,2BAA2B,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACnF,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,YAA+B,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,cAAsB,EAAE,KAAK,GAAG,KAAK,EAAE,KAAc;IACxE,yDAAyD;IACzD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,2BAA2B,CAAC,cAAc,EAAE,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5F,cAAc,CACZ,yBAAyB,cAAc,2BAA2B;QAChE,2EAA2E;QAC3E,+CAA+C,CAClD,CAAC;AACJ,CAAC"}
|
|
@@ -2,4 +2,4 @@ import { BaseChatModel, type BaseChatModelParams } from '@langchain/core/languag
|
|
|
2
2
|
import { OpenAIChatInput } from '@langchain/openai';
|
|
3
3
|
import { ChatOpenAIFields } from '@langchain/openai';
|
|
4
4
|
export declare function processJsonConfig(llmConfig: OpenAIChatInput & ChatOpenAIFields & BaseChatModelParams): Promise<BaseChatModel>;
|
|
5
|
-
export declare function init(configFileName: string): void;
|
|
5
|
+
export declare function init(configFileName: string, force?: boolean, model?: string): void;
|
package/dist/providers/openai.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { displayWarning } from '#src/utils/consoleUtils.js';
|
|
2
2
|
import { env } from '#src/utils/systemUtils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { writeConfigFileWithMessages } from '#src/utils/fileUtils.js';
|
|
4
|
+
import { buildInitConfigContent, getCuratedFallbackModel } from '#src/providers/modelDiscovery.js';
|
|
4
5
|
/**
|
|
5
6
|
* OpenAI reasoning-model families that reject any non-default `temperature`: the API 400s with
|
|
6
7
|
* "Unsupported value: 'temperature' does not support 0 ... Only the default (1) value is
|
|
@@ -24,7 +25,7 @@ export async function processJsonConfig(llmConfig) {
|
|
|
24
25
|
const configFields = {
|
|
25
26
|
...llmConfig,
|
|
26
27
|
apiKey: openaiApiKey,
|
|
27
|
-
model: llmConfig.model || '
|
|
28
|
+
model: llmConfig.model || getCuratedFallbackModel('openai'),
|
|
28
29
|
};
|
|
29
30
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
31
|
delete configFields.type;
|
|
@@ -54,18 +55,12 @@ function getApiKey(llmConfig) {
|
|
|
54
55
|
return llmConfig.apiKey || env.OPENAI_API_KEY;
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
-
"llm": {
|
|
59
|
-
"type": "openai",
|
|
60
|
-
"model": "gpt-5.5"
|
|
61
|
-
}
|
|
62
|
-
}`;
|
|
63
|
-
export function init(configFileName) {
|
|
58
|
+
export function init(configFileName, force = false, model) {
|
|
64
59
|
// Determine which content to use based on file extension
|
|
65
60
|
if (!configFileName.endsWith('.json')) {
|
|
66
61
|
throw new Error('Only JSON config is supported.');
|
|
67
62
|
}
|
|
68
|
-
|
|
63
|
+
writeConfigFileWithMessages(configFileName, buildInitConfigContent('openai', model), force);
|
|
69
64
|
displayWarning(`You need to edit your ${configFileName} to configure model, ` +
|
|
70
65
|
'or define OPENAI_API_KEY environment variable.');
|
|
71
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAQhD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAQhD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEnG;;;;;;;GAOG;AACH,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAErD,yFAAyF;AACzF,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,SAAS,4BAA4B,CAAC,KAAyB;IAC7D,OAAO,CAAC,CAAC,KAAK,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,iEAAiE;AACjE,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAmE;IAEnE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACzD,wEAAwE;IACxE,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG;QACnB,GAAG,SAAS;QACZ,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,uBAAuB,CAAC,QAAQ,CAAC;KAC5D,CAAC;IACF,8DAA8D;IAC9D,OAAQ,YAAoB,CAAC,IAAI,CAAC;IAClC,8DAA8D;IAC9D,OAAQ,YAAoB,CAAC,yBAAyB,CAAC;IAEvD,6FAA6F;IAC7F,8FAA8F;IAC9F,6FAA6F;IAC7F,IACE,4BAA4B,CAAC,YAAY,CAAC,KAAK,CAAC;QAChD,YAAY,CAAC,WAAW,KAAK,SAAS;QACtC,YAAY,CAAC,WAAW,KAAK,6BAA6B,EAC1D,CAAC;QACD,cAAc,CACZ,UAAU,YAAY,CAAC,KAAK,0CAA0C;YACpE,qBAAqB,6BAA6B,gBAAgB;YAClE,0CAA0C,YAAY,CAAC,WAAW,GAAG,CACxE,CAAC;QACF,8DAA8D;QAC9D,OAAQ,YAAoB,CAAC,WAAW,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,SAAS,CAAC,SAAmE;IACpF,8DAA8D;IAC9D,MAAM,IAAI,GAAG,SAA0C,CAAC;IACxD,IAAI,IAAI,CAAC,yBAAyB,IAAI,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC1E,OAAO,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,cAAc,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,cAAsB,EAAE,KAAK,GAAG,KAAK,EAAE,KAAc;IACxE,yDAAyD;IACzD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,2BAA2B,CAAC,cAAc,EAAE,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5F,cAAc,CACZ,yBAAyB,cAAc,uBAAuB;QAC5D,gDAAgD,CACnD,CAAC;AACJ,CAAC"}
|
|
@@ -2,4 +2,4 @@ import { BaseChatModel, type BaseChatModelParams } from '@langchain/core/languag
|
|
|
2
2
|
import { OpenAIChatInput } from '@langchain/openai';
|
|
3
3
|
import { ChatOpenAIFields } from '@langchain/openai';
|
|
4
4
|
export declare function processJsonConfig(llmConfig: OpenAIChatInput & ChatOpenAIFields & BaseChatModelParams): Promise<BaseChatModel>;
|
|
5
|
-
export declare function init(configFileName: string): void;
|
|
5
|
+
export declare function init(configFileName: string, force?: boolean, model?: string): void;
|