agentfootprint 9.72.0 → 9.74.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/dist/adapters/identity/azure.js +306 -0
  3. package/dist/adapters/identity/azure.js.map +1 -0
  4. package/dist/adapters/llm/FoundryLocalProvider.js +992 -0
  5. package/dist/adapters/llm/FoundryLocalProvider.js.map +1 -0
  6. package/dist/adapters/llm/FoundryProvider.js +273 -0
  7. package/dist/adapters/llm/FoundryProvider.js.map +1 -0
  8. package/dist/adapters/llm/OllamaProvider.js +171 -12
  9. package/dist/adapters/llm/OllamaProvider.js.map +1 -1
  10. package/dist/adapters/llm/OpenAIProvider.js +117 -5
  11. package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
  12. package/dist/adapters/llm/createProvider.js +143 -10
  13. package/dist/adapters/llm/createProvider.js.map +1 -1
  14. package/dist/adapters/types.js.map +1 -1
  15. package/dist/esm/adapters/identity/azure.d.ts +188 -0
  16. package/dist/esm/adapters/identity/azure.js +302 -0
  17. package/dist/esm/adapters/identity/azure.js.map +1 -0
  18. package/dist/esm/adapters/llm/FoundryLocalProvider.d.ts +215 -0
  19. package/dist/esm/adapters/llm/FoundryLocalProvider.js +986 -0
  20. package/dist/esm/adapters/llm/FoundryLocalProvider.js.map +1 -0
  21. package/dist/esm/adapters/llm/FoundryProvider.d.ts +178 -0
  22. package/dist/esm/adapters/llm/FoundryProvider.js +268 -0
  23. package/dist/esm/adapters/llm/FoundryProvider.js.map +1 -0
  24. package/dist/esm/adapters/llm/OllamaProvider.js +171 -12
  25. package/dist/esm/adapters/llm/OllamaProvider.js.map +1 -1
  26. package/dist/esm/adapters/llm/OpenAIProvider.d.ts +111 -0
  27. package/dist/esm/adapters/llm/OpenAIProvider.js +115 -4
  28. package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
  29. package/dist/esm/adapters/llm/createProvider.d.ts +48 -12
  30. package/dist/esm/adapters/llm/createProvider.js +143 -10
  31. package/dist/esm/adapters/llm/createProvider.js.map +1 -1
  32. package/dist/esm/adapters/types.d.ts +4 -2
  33. package/dist/esm/adapters/types.js.map +1 -1
  34. package/dist/esm/identity.d.ts +1 -0
  35. package/dist/esm/identity.js +9 -0
  36. package/dist/esm/identity.js.map +1 -1
  37. package/dist/esm/index.d.ts +1 -1
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/providers.d.ts +5 -0
  40. package/dist/esm/providers.js +14 -0
  41. package/dist/esm/providers.js.map +1 -1
  42. package/dist/identity.js +14 -1
  43. package/dist/identity.js.map +1 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/providers.js +20 -1
  46. package/dist/providers.js.map +1 -1
  47. package/dist/types/adapters/identity/azure.d.ts +189 -0
  48. package/dist/types/adapters/identity/azure.d.ts.map +1 -0
  49. package/dist/types/adapters/llm/FoundryLocalProvider.d.ts +216 -0
  50. package/dist/types/adapters/llm/FoundryLocalProvider.d.ts.map +1 -0
  51. package/dist/types/adapters/llm/FoundryProvider.d.ts +179 -0
  52. package/dist/types/adapters/llm/FoundryProvider.d.ts.map +1 -0
  53. package/dist/types/adapters/llm/OllamaProvider.d.ts.map +1 -1
  54. package/dist/types/adapters/llm/OpenAIProvider.d.ts +111 -0
  55. package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
  56. package/dist/types/adapters/llm/createProvider.d.ts +48 -12
  57. package/dist/types/adapters/llm/createProvider.d.ts.map +1 -1
  58. package/dist/types/adapters/types.d.ts +4 -2
  59. package/dist/types/adapters/types.d.ts.map +1 -1
  60. package/dist/types/identity.d.ts +1 -0
  61. package/dist/types/identity.d.ts.map +1 -1
  62. package/dist/types/index.d.ts +1 -1
  63. package/dist/types/index.d.ts.map +1 -1
  64. package/dist/types/providers.d.ts +5 -0
  65. package/dist/types/providers.d.ts.map +1 -1
  66. package/package.json +5 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoundryLocalProvider.js","sourceRoot":"","sources":["../../../src/adapters/llm/FoundryLocalProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ /**
3
+ * FoundryProvider — Microsoft Foundry (Azure AI Foundry) projects over the
4
+ * api-version-free v1 OpenAI-compatible inference route.
5
+ *
6
+ * Pattern: Adapter (GoF) + Ports-and-Adapters (Cockburn 2005), composed —
7
+ * a thin vendor file over `openai()`'s machinery, the exact
8
+ * `azureOpenai()` shape.
9
+ * Role: Outer ring — owns EVERY Foundry spelling (the project-endpoint
10
+ * shape, the env-var names, the token audience, the `/openai/v1`
11
+ * derivation) so the `LLMProvider` port and the rest of the library
12
+ * never learn one. Knows nothing about agents, recorders, or
13
+ * compositions.
14
+ * Emits: N/A.
15
+ *
16
+ * ─── Why this exists ─────────────────────────────────────────────────
17
+ *
18
+ * This is the JS answer to Microsoft's
19
+ * `FoundryChatClient(project_endpoint, model, credential)`: point at a
20
+ * Foundry PROJECT, name a DEPLOYMENT, hand over a credential, done. The
21
+ * doc-verified facts it is built on (learn.microsoft.com, Aug 2026):
22
+ *
23
+ * • A Foundry project endpoint
24
+ * (`https://{account}.services.ai.azure.com/api/projects/{project}`)
25
+ * itself serves the v1 inference route by simple suffixing: `+ /openai/v1`.
26
+ * No `api-version` query, no deployment-scoped path.
27
+ * • The wire's `model` field carries the DEPLOYMENT name — Foundry's
28
+ * "model" is a deployment, exactly as on classic Azure OpenAI.
29
+ * • Auth is `Authorization: Bearer <Entra token or api key>` — the v1
30
+ * route accepts a key as a Bearer too.
31
+ *
32
+ * Because that route IS current OpenAI wire, this file is `openai({ baseURL,
33
+ * legacyEndpoint: false, … })` plus Foundry's spellings — the same
34
+ * composition `azureOpenai()` uses, with the modern dialect declared instead
35
+ * of implied away by the custom `baseURL`.
36
+ *
37
+ * ─── Auth: three doors, one refused ambiguity ────────────────────────
38
+ *
39
+ * • `credential` — any `@azure/identity` credential (duck-typed; the SDK
40
+ * is never imported for this door). Tokens are minted per request
41
+ * through `openai()`'s credential-callback seam.
42
+ * • `apiKey` — a static key, or a callback re-read per request.
43
+ * • NEITHER — `new DefaultAzureCredential()` via the optional
44
+ * `@azure/identity` peer: the platform's own blessed zero-config pattern
45
+ * inside a hosted Foundry container (the platform injects
46
+ * `FOUNDRY_PROJECT_ENDPOINT` and gives the agent a managed identity, so
47
+ * `foundry()` with no arguments is a complete configuration there).
48
+ * • BOTH `credential` and `apiKey` — refused by name. Two credentials is a
49
+ * config bug, not extra security.
50
+ *
51
+ * ─── Ceilings (stated, not worked around) ────────────────────────────
52
+ *
53
+ * • DEPLOYMENT NAMES HIDE THE MODEL. o-series auto-detection cannot work on
54
+ * an arbitrary deployment name, so `reasoning` must be declared — the same
55
+ * rationale, word for word, as `azureOpenai()`.
56
+ * • INFERENCE ONLY. The token audience here is the data plane
57
+ * ({@link AZURE_AI_SCOPE}); the ARM control plane is a different audience
58
+ * and a different job — see `entraIdentity()` in the identity adapters.
59
+ * • Everything `openai()` does not do (multi-modal, JSON-mode), this does
60
+ * not do either — it is the same machinery.
61
+ */
62
+ Object.defineProperty(exports, "__esModule", { value: true });
63
+ exports.foundry = exports.foundryInferenceUrl = void 0;
64
+ const lazyRequire_js_1 = require("../../lib/lazyRequire.js");
65
+ const OpenAIProvider_js_1 = require("./OpenAIProvider.js");
66
+ const azure_js_1 = require("../identity/azure.js");
67
+ /** Every refusal this file authors opens with this name. */
68
+ const ADAPTER = 'foundry';
69
+ /** The endpoint shape refusals point at — quoted, never guessed at. */
70
+ const ENDPOINT_SHAPE = 'https://{account}.services.ai.azure.com/api/projects/{project}';
71
+ // ─── URL derivation ─────────────────────────────────────────────────
72
+ /**
73
+ * Project endpoint → the base URL the v1 inference route serves.
74
+ *
75
+ * `https://acct.services.ai.azure.com/api/projects/proj`
76
+ * → `https://acct.services.ai.azure.com/api/projects/proj/openai/v1`
77
+ * …with trailing slashes → the same
78
+ * …already ending in `/openai/v1` → the same (idempotent — `azureUrl.ts`'s
79
+ * rule, applied to Foundry's suffix)
80
+ *
81
+ * Validation lives HERE, beside the derivation, so there is exactly ONE owner
82
+ * of what a Foundry endpoint looks like: it must be `https://` and it must
83
+ * contain `/api/projects/` — anything else is some OTHER Azure endpoint
84
+ * (a resource root, an ARM URL) that would 404 or 401 far from the typo.
85
+ * Endpoints are NOT secrets, so a malformed one is echoed back: seeing what
86
+ * arrived is the fastest fix. The one carve-out is cleartext to LOOPBACK
87
+ * (127.0.0.1 / localhost / [::1]) — that is how the wire tests drive the
88
+ * REAL SDK against a local fake, and refusing bytes that cannot leave the
89
+ * machine would buy no safety.
90
+ *
91
+ * A `?` or `#` is refused too, and for a reason particular to a SUFFIXING
92
+ * derivation: `…/api/projects/p?x=1` + `/openai/v1` is
93
+ * `…/api/projects/p?x=1/openai/v1`, where the route lives entirely inside the
94
+ * query string. That URL is well-formed, constructs without complaint, and
95
+ * 404s on every request — the exact "late and far from the typo" failure this
96
+ * validator exists to convert into an early named one. The v1 inference route
97
+ * takes no query parameters at all (that is the point of it: no
98
+ * `api-version`), so there is nothing legitimate to preserve.
99
+ */
100
+ function foundryInferenceUrl(projectEndpoint) {
101
+ const trimmed = projectEndpoint.replace(/\/+$/, '');
102
+ const loopback = /^http:\/\/(127\.0\.0\.1|localhost|\[::1\])(:\d+)?\//i.test(trimmed);
103
+ const shapeOk = (/^https:\/\//i.test(trimmed) || loopback) && trimmed.includes('/api/projects/');
104
+ if (!shapeOk) {
105
+ throw new Error(`${ADAPTER}: \`projectEndpoint\` does not look like a Foundry project endpoint: ` +
106
+ `${projectEndpoint}\n` +
107
+ ` Expected: ${ENDPOINT_SHAPE}\n` +
108
+ ' Fix: copy the project endpoint from the Foundry portal (project Overview page), or ' +
109
+ 'run where the platform injects FOUNDRY_PROJECT_ENDPOINT.');
110
+ }
111
+ // AFTER the shape check: an endpoint that is wrong in both ways gets the
112
+ // more fundamental diagnosis first.
113
+ const marker = trimmed.includes('?') ? '?' : trimmed.includes('#') ? '#' : undefined;
114
+ if (marker !== undefined) {
115
+ throw new Error(`${ADAPTER}: \`projectEndpoint\` carries a \`${marker}\`, and this route is built by ` +
116
+ `SUFFIXING the endpoint: ${projectEndpoint}\n` +
117
+ ` Appending \`/openai/v1\` would put the entire inference path INSIDE the ` +
118
+ `${marker === '?' ? 'query string' : 'fragment'} — a URL that constructs fine and then ` +
119
+ `404s on every request, far from the typo.\n` +
120
+ ` Expected: ${ENDPOINT_SHAPE}\n` +
121
+ ` Fix: drop everything from the \`${marker}\` onward — the v1 route is ` +
122
+ 'api-version-free and takes no query parameters.');
123
+ }
124
+ return trimmed.endsWith('/openai/v1') ? trimmed : `${trimmed}/openai/v1`;
125
+ }
126
+ exports.foundryInferenceUrl = foundryInferenceUrl;
127
+ // ─── Factory ────────────────────────────────────────────────────────
128
+ /**
129
+ * Which roles this wire carries inside `messages` — `inner`'s wire, restated
130
+ * rather than inherited by accident (azureOpenai's stance): the v1 route is
131
+ * OpenAI's chat-completions shape, where the system prompt rides as a message
132
+ * (as `developer` on reasoning deployments), so all three roles survive.
133
+ */
134
+ const CARRIES_IN_MESSAGES = Object.freeze(['system', 'user', 'assistant']);
135
+ /**
136
+ * Build an `LLMProvider` for a **Microsoft Foundry project**.
137
+ *
138
+ * Inside a hosted Foundry container this is a COMPLETE configuration:
139
+ *
140
+ * @example
141
+ * import { foundry } from 'agentfootprint/providers';
142
+ *
143
+ * const agent = Agent.create({
144
+ * provider: foundry(), // endpoint injected, managed identity signs
145
+ * model: 'foundry', // → the configured deployment
146
+ * }).build();
147
+ *
148
+ * Anywhere else, name the project and the deployment (and sign in, or pass a
149
+ * credential):
150
+ *
151
+ * @example
152
+ * const provider = foundry({
153
+ * projectEndpoint: 'https://my-acct.services.ai.azure.com/api/projects/my-proj',
154
+ * deployment: 'gpt-4o-128k',
155
+ * credential: new DefaultAzureCredential(),
156
+ * });
157
+ *
158
+ * The request's `model` is the DEPLOYMENT name: the shorthand `'foundry'`
159
+ * resolves to the configured default, and a concrete deployment id passes
160
+ * through untouched (so one provider can target several deployments — the
161
+ * azureOpenai precedent).
162
+ */
163
+ function foundry(options = {}) {
164
+ const projectEndpoint = options.projectEndpoint ?? process.env.FOUNDRY_PROJECT_ENDPOINT;
165
+ if (!projectEndpoint) {
166
+ throw new Error(`${ADAPTER}: a \`projectEndpoint\` is required — the shape is ${ENDPOINT_SHAPE}.\n` +
167
+ ' Hosted Foundry containers have it injected as FOUNDRY_PROJECT_ENDPOINT; anywhere ' +
168
+ 'else, copy it from the Foundry portal.\n' +
169
+ ' Fix: pass `projectEndpoint`, or set FOUNDRY_PROJECT_ENDPOINT.');
170
+ }
171
+ const baseURL = foundryInferenceUrl(projectEndpoint);
172
+ const deployment = options.deployment ?? process.env.AZURE_AI_MODEL_DEPLOYMENT_NAME ?? process.env.MODEL_NAME;
173
+ if (!deployment) {
174
+ throw new Error(`${ADAPTER}: a \`deployment\` is required — Foundry's "model" is the DEPLOYMENT name.\n` +
175
+ ' Fix: pass `deployment`, or set AZURE_AI_MODEL_DEPLOYMENT_NAME (the azd scaffolding ' +
176
+ 'convention) or MODEL_NAME.');
177
+ }
178
+ const apiKey = resolveFoundryAuth(options);
179
+ // Reuse ALL of openai()'s logic. The v1 route is CURRENT OpenAI wire, so the
180
+ // custom baseURL must not demote it to the legacy dialect: `legacyEndpoint:
181
+ // false` is the whole reason that dial is public — max_completion_tokens,
182
+ // stream_options.include_usage, and declared forced tool choice.
183
+ const inner = (0, OpenAIProvider_js_1.openai)({
184
+ baseURL,
185
+ legacyEndpoint: false,
186
+ ...(apiKey !== undefined && { apiKey }),
187
+ defaultModel: deployment,
188
+ ...(options.reasoning !== undefined && { reasoning: options.reasoning }),
189
+ ...(options.defaultMaxTokens !== undefined && { defaultMaxTokens: options.defaultMaxTokens }),
190
+ ...(options._client && { _client: options._client }),
191
+ });
192
+ // Foundry's "model" IS the deployment — rewrite the shorthand to it; a
193
+ // concrete id passes through (so you can target multiple deployments).
194
+ const withDeployment = (req) => req.model === 'foundry' ? { ...req, model: deployment } : req;
195
+ return {
196
+ name: 'foundry',
197
+ // The wire is `inner`'s, so the capability is `inner`'s. Re-stating it
198
+ // rather than inheriting by accident: this factory builds a fresh object,
199
+ // and a dropped capability silently becomes the user/assistant floor.
200
+ carriesInMessages: CARRIES_IN_MESSAGES,
201
+ ...(inner.carriesForcedToolChoice !== undefined && {
202
+ carriesForcedToolChoice: inner.carriesForcedToolChoice,
203
+ }),
204
+ // `hooks` is FORWARDED, not dropped — see LLMCallHooks in adapters/types.ts.
205
+ complete: (req, hooks) => inner.complete(withDeployment(req), hooks),
206
+ ...(inner.stream && {
207
+ stream: (req, hooks) => inner.stream(withDeployment(req), hooks),
208
+ }),
209
+ };
210
+ }
211
+ exports.foundry = foundry;
212
+ // ─── Auth resolution ────────────────────────────────────────────────
213
+ /**
214
+ * Options → what `openai()`'s `apiKey` slot receives. Three doors and one
215
+ * refusal, resolved in one place so the factory above reads as composition.
216
+ *
217
+ * The `credential` door returns a CALLBACK, which is `openai()`'s per-request
218
+ * credential seam: called before every request, and the SDK client is rebuilt
219
+ * only when the returned STRING changes. That is exactly right for
220
+ * MSAL-cached tokens — the cache serves the same string until it refreshes,
221
+ * so a cached token costs one function call and zero client rebuilds, and a
222
+ * refreshed one becomes a new client instead of a 401.
223
+ */
224
+ function resolveFoundryAuth(options) {
225
+ // Two credentials is not "extra secure" — whichever one this factory
226
+ // silently preferred would be the one the consumer did not think was in use.
227
+ if (options.credential && options.apiKey) {
228
+ throw new Error(`${ADAPTER}: both \`credential\` and \`apiKey\` were given, and they are two answers to ` +
229
+ 'the same question — which identity signs the request.\n' +
230
+ ' Fix: pass exactly one — `credential` (keyless Entra ID) or `apiKey` (static key).');
231
+ }
232
+ if (options.credential) {
233
+ const credential = options.credential;
234
+ const scope = options.scope ?? azure_js_1.AZURE_AI_SCOPE;
235
+ return async () => (0, OpenAIProvider_js_1.entraBearerToken)(ADAPTER, credential, scope);
236
+ }
237
+ // A string or a callback both pass straight through — `openai()` already
238
+ // owns the re-read-per-request contract for callbacks.
239
+ if (options.apiKey !== undefined)
240
+ return options.apiKey;
241
+ if (options._client) {
242
+ // The injected double replaces the WIRE, not the credential — and with no
243
+ // credential given there is nothing for a test to observe. Constructing a
244
+ // real DefaultAzureCredential underneath a double would reach for genuine
245
+ // cloud identity from inside a unit test, so the double runs keyless.
246
+ return undefined;
247
+ }
248
+ // NEITHER door named → the platform's own blessed zero-config pattern:
249
+ // inside a hosted Foundry container (injected FOUNDRY_PROJECT_ENDPOINT +
250
+ // per-agent managed identity), `new DefaultAzureCredential()` is what
251
+ // Microsoft's own FoundryChatClient does. Constructing the chain fetches
252
+ // NOTHING — tokens are minted per request by the callback below — but the
253
+ // peer-dep is loaded HERE, at factory time, so a missing package is refused
254
+ // where the consumer typed `foundry(...)` (the same stance `openai()` takes
255
+ // on its own SDK).
256
+ let sdk;
257
+ try {
258
+ sdk = (0, lazyRequire_js_1.lazyRequire)('@azure/identity');
259
+ }
260
+ catch {
261
+ throw new Error(`${ADAPTER}: keyless zero-config auth needs the \`@azure/identity\` package (an optional ` +
262
+ 'peer this library never bundles).\n' +
263
+ ' Fix: npm i @azure/identity — or pass `credential` or `apiKey` explicitly.');
264
+ }
265
+ if (typeof sdk.DefaultAzureCredential !== 'function') {
266
+ throw new Error(`${ADAPTER}: \`@azure/identity\` is installed but exports no \`DefaultAzureCredential\`.\n` +
267
+ ' Fix: npm i @azure/identity@^4 — or pass `credential` or `apiKey` explicitly.');
268
+ }
269
+ const chain = new sdk.DefaultAzureCredential();
270
+ const scope = options.scope ?? azure_js_1.AZURE_AI_SCOPE;
271
+ return async () => (0, OpenAIProvider_js_1.entraBearerToken)(ADAPTER, chain, scope);
272
+ }
273
+ //# sourceMappingURL=FoundryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoundryProvider.js","sourceRoot":"","sources":["../../../src/adapters/llm/FoundryProvider.ts"],"names":[],"mappings":"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"}
@@ -61,6 +61,8 @@
61
61
  */
62
62
  Object.defineProperty(exports, "__esModule", { value: true });
63
63
  exports.OllamaProvider = exports.ollama = exports.OllamaUnavailableError = void 0;
64
+ /** Cap for any text the wire supplies before it becomes one of our messages. */
65
+ const ERROR_TEXT_CAP = 200;
64
66
  // ─── Errors ─────────────────────────────────────────────────────────
65
67
  /**
66
68
  * The two failures a local runtime actually has, told in words that
@@ -158,12 +160,20 @@ function ollama(modelOrOptions, maybeOptions) {
158
160
  // checked rather than forgotten.
159
161
  carriesForcedToolChoice: false,
160
162
  async complete(req) {
163
+ // A signal that fired BEFORE the call stops it here, before any socket
164
+ // opens — the `/api/tags` enrichment included. An already-aborted signal
165
+ // never dispatches another 'abort' event, so a listener alone cannot
166
+ // see it.
167
+ throwIfAborted(req.signal);
161
168
  const body = buildBody(req, cfg, false);
162
169
  const response = await post(body, req);
163
- const json = (await response.json());
170
+ // `fetch` resolves on HEADERS, so reading the body is the stretch where
171
+ // a caller abort would otherwise be inert — honor it for that too.
172
+ const json = (await untilAborted(response.json(), req.signal));
164
173
  return fromOllamaResponse(json, nextToolCallId);
165
174
  },
166
175
  async *stream(req) {
176
+ throwIfAborted(req.signal);
167
177
  const body = buildBody(req, cfg, true);
168
178
  const response = await post(body, req);
169
179
  if (!response.body)
@@ -175,8 +185,20 @@ function ollama(modelOrOptions, maybeOptions) {
175
185
  let promptEvalCount = 0;
176
186
  let evalCount = 0;
177
187
  let tokenIndex = 0;
178
- for await (const chunk of parseNdjson(response.body)) {
188
+ // The signal rides INTO the parser: it is what stops a generation the
189
+ // caller no longer wants, and what cancels the body when it does.
190
+ for await (const chunk of parseNdjson(response.body, req.signal)) {
179
191
  const frame = chunk;
192
+ // An already-200 stream can still FAIL mid-generation, and this wire
193
+ // says so IN BAND with an `{"error": "..."}` frame. Such a frame
194
+ // carries no `message` and no `done`, so the guards below would skip
195
+ // it and the terminal chunk would report a truncated answer as
196
+ // `stopReason: 'stop'` with nobody told. Raise instead: a failed
197
+ // generation is a failure, never a shorter answer.
198
+ const failure = frameFailureText(frame);
199
+ if (failure) {
200
+ throw providerError(`[ollama] the stream failed mid-generation — ${failure}`);
201
+ }
180
202
  // Counts ride the terminal frame, whose `message.content` is empty —
181
203
  // read them before any content guard, or the only token counts the
182
204
  // stream reports are thrown away (the failure that made streamed
@@ -367,7 +389,19 @@ function toOllamaTool(schema) {
367
389
  },
368
390
  };
369
391
  }
392
+ /**
393
+ * Wire response → the port's shape.
394
+ *
395
+ * @throws an `OllamaProviderError` when the 200 body is really a failure
396
+ * (`{"error": "..."}`). Reading it as a response would yield empty content
397
+ * with `stopReason: 'stop'` and zero tokens — a failed call dressed as a
398
+ * successful one.
399
+ */
370
400
  function fromOllamaResponse(response, nextToolCallId) {
401
+ if (response.error !== undefined && response.error !== null) {
402
+ const detail = extractErrorPayload(response.error) || 'the daemon named no reason';
403
+ throw providerError(`[ollama] the daemon answered 200 with an error — ${detail}`);
404
+ }
371
405
  const message = response.message;
372
406
  const wireToolCalls = message?.tool_calls ?? [];
373
407
  const toolCalls = wireToolCalls.map((tc) => toLLMToolCall(tc, nextToolCallId));
@@ -464,14 +498,24 @@ function normalizeStopReason(raw, hasToolCalls) {
464
498
  return raw;
465
499
  }
466
500
  }
467
- /** Parse an NDJSON body — one JSON object per line. */
468
- async function* parseNdjson(body) {
501
+ /**
502
+ * Parse an NDJSON body — one JSON object per line.
503
+ *
504
+ * Two things here a plain line reader would not do, both because the other
505
+ * end is a model on THIS machine: the caller's `signal` interrupts the read
506
+ * (`fetch` resolved on headers, so this loop is the whole rest of the call),
507
+ * and the body is CANCELLED on the way out — a generation nobody is reading
508
+ * still occupies the machine.
509
+ */
510
+ async function* parseNdjson(body, signal) {
469
511
  const reader = body.getReader();
470
512
  const decoder = new TextDecoder();
471
513
  let buf = '';
472
514
  try {
473
515
  for (;;) {
474
- const { value, done } = await reader.read();
516
+ // The read is RACED against the caller's signal. A signal that only
517
+ // reached the headers would be a cancellation that cancels nothing.
518
+ const { value, done } = await untilAborted(reader.read(), signal);
475
519
  if (done)
476
520
  break;
477
521
  buf += decoder.decode(value, { stream: true });
@@ -501,7 +545,23 @@ async function* parseNdjson(body) {
501
545
  }
502
546
  }
503
547
  finally {
504
- reader.releaseLock();
548
+ // CANCEL, not merely release the lock. The terminal `done` frame (the
549
+ // stream loop breaks on it), a consumer that breaks out, an error frame,
550
+ // a caller abort — every one of them leaves an open body, and an open
551
+ // body means the local model keeps generating for nobody and the socket
552
+ // stays up.
553
+ try {
554
+ await reader.cancel();
555
+ }
556
+ catch {
557
+ /* already closed or errored — nothing left to close */
558
+ }
559
+ try {
560
+ reader.releaseLock();
561
+ }
562
+ catch {
563
+ /* a lock the runtime already dropped */
564
+ }
505
565
  }
506
566
  }
507
567
  /**
@@ -518,9 +578,16 @@ async function* parseNdjson(body) {
518
578
  * to break on our behalf. So the timeout wins on its own.
519
579
  *
520
580
  * A caller's own `AbortSignal` is forwarded and, if IT is what fired, the
521
- * abort is re-thrown as an abort rather than blamed on the daemon.
581
+ * abort is re-thrown as an abort rather than blamed on the daemon —
582
+ * including a signal that was ALREADY aborted when the call was made, which
583
+ * never dispatches an event for a listener to hear.
522
584
  */
523
585
  async function fetchUntilHeaders(fetchImpl, url, init, opts) {
586
+ // An already-aborted signal never dispatches another 'abort' event, so the
587
+ // bridge below could not fire and the request would go out on a turn the
588
+ // caller has cancelled. Refuse before the socket opens, and refuse with the
589
+ // caller's own reason: an abort is their call, never a daemon fault.
590
+ throwIfAborted(opts.signal);
524
591
  const controller = new AbortController();
525
592
  let timedOut = false;
526
593
  let timer;
@@ -579,7 +646,7 @@ async function describeFailure(response, model, baseUrl, fetchImpl, timeoutMs) {
579
646
  });
580
647
  }
581
648
  const detail = extractErrorText(bodyText);
582
- return Object.assign(new Error(`[ollama] ${response.status} ${response.statusText}${detail ? ` — ${detail}` : ''}`.trim()), { name: 'OllamaProviderError', status: response.status });
649
+ return providerError(`[ollama] ${response.status} ${response.statusText}${detail ? ` — ${detail}` : ''}`.trim(), response.status);
583
650
  }
584
651
  async function listPulledModels(fetchImpl, baseUrl, timeoutMs) {
585
652
  const controller = new AbortController();
@@ -611,18 +678,110 @@ async function safeText(response) {
611
678
  return '';
612
679
  }
613
680
  }
614
- /** Native errors are `{"error": "..."}`; fall back to the raw text. */
681
+ /**
682
+ * Native errors are `{"error": "..."}`; the object spelling and raw text are
683
+ * tolerated. Every path is capped — the wire's words help diagnose, but a
684
+ * daemon echoing something enormous (or poisoned) must not become the message.
685
+ */
615
686
  function extractErrorText(bodyText) {
616
687
  if (!bodyText)
617
688
  return '';
618
689
  try {
619
690
  const parsed = JSON.parse(bodyText);
620
- if (typeof parsed.error === 'string' && parsed.error.length > 0)
621
- return parsed.error;
691
+ const detail = extractErrorPayload(parsed.error);
692
+ if (detail)
693
+ return detail;
622
694
  }
623
695
  catch {
624
696
  /* not JSON — fall through */
625
697
  }
626
- return bodyText.slice(0, 200);
698
+ return bodyText.slice(0, ERROR_TEXT_CAP);
699
+ }
700
+ /**
701
+ * The words out of an `error` payload — a bare string on this wire, the
702
+ * `{"message": "..."}` spelling tolerated — capped like every other piece of
703
+ * wire text this file repeats. Empty when there is nothing usable to say, so
704
+ * a caller can tell "no error" from "an error that named no reason".
705
+ */
706
+ function extractErrorPayload(err) {
707
+ if (typeof err === 'string')
708
+ return err.slice(0, ERROR_TEXT_CAP);
709
+ if (typeof err === 'object' && err !== null) {
710
+ const message = err.message;
711
+ if (typeof message === 'string' && message.length > 0) {
712
+ return message.slice(0, ERROR_TEXT_CAP);
713
+ }
714
+ }
715
+ return '';
716
+ }
717
+ /**
718
+ * What a mid-stream frame says went wrong — '' when nothing did.
719
+ *
720
+ * One spelling on this wire: an NDJSON frame carrying `error`. It means the
721
+ * generation failed, and it carries neither `message` nor `done`, which is
722
+ * exactly why an unchecked one looks like an ordinary skippable frame. An
723
+ * ordinary frame — the terminal `done` one included, whose content is empty
724
+ * by design — has no `error` key at all, so this guard stays narrow.
725
+ */
726
+ function frameFailureText(frame) {
727
+ const data = typeof frame === 'object' && frame !== null ? frame : undefined;
728
+ const err = data?.error;
729
+ if (err === undefined || err === null)
730
+ return '';
731
+ return extractErrorPayload(err) || 'the daemon reported an error but named no reason';
732
+ }
733
+ /**
734
+ * The provider's own labelled error — one shape for every failure that is not
735
+ * the typed, actionable {@link OllamaUnavailableError}.
736
+ */
737
+ function providerError(message, status) {
738
+ return Object.assign(new Error(message), {
739
+ name: 'OllamaProviderError',
740
+ ...(status !== undefined && { status }),
741
+ });
742
+ }
743
+ /**
744
+ * An abort is the CALLER's word, so it must reach them AS an abort — never
745
+ * dressed up as a daemon failure. The signal's own `reason` is used when it
746
+ * is an Error (what every runtime supplies: a DOMException named
747
+ * 'AbortError'); anything else becomes one, keeping the reason as `cause`.
748
+ */
749
+ function asAbortError(reason) {
750
+ if (reason instanceof Error)
751
+ return reason;
752
+ return Object.assign(new Error('This operation was aborted'), {
753
+ name: 'AbortError',
754
+ ...(reason !== undefined && { cause: reason }),
755
+ });
756
+ }
757
+ /** Stop right here when the caller's signal has already fired. */
758
+ function throwIfAborted(signal) {
759
+ if (signal?.aborted)
760
+ throw asAbortError(signal.reason);
761
+ }
762
+ /**
763
+ * `promise`, except that a caller abort ends the wait immediately.
764
+ *
765
+ * `fetch` resolves on HEADERS. Everything after that — a streamed body, a
766
+ * large non-streaming JSON read — used to be deaf to the caller's signal, so
767
+ * a cancelled turn kept the local model generating to completion. This is
768
+ * what makes `LLMRequest.signal` honest for the whole call rather than only
769
+ * until the headers land. The CALLER's signal only: `timeoutMs` stays exactly
770
+ * what it always was, a bound on the wait for headers and never on generation.
771
+ */
772
+ function untilAborted(promise, signal) {
773
+ if (!signal)
774
+ return promise;
775
+ if (signal.aborted) {
776
+ void promise.catch(() => undefined); // the abandoned work must not warn
777
+ return Promise.reject(asAbortError(signal.reason));
778
+ }
779
+ return new Promise((resolve, reject) => {
780
+ const onAbort = () => reject(asAbortError(signal.reason));
781
+ signal.addEventListener('abort', onAbort, { once: true });
782
+ promise.then(resolve, reject).finally(() => {
783
+ signal.removeEventListener('abort', onAbort);
784
+ });
785
+ });
627
786
  }
628
787
  //# sourceMappingURL=OllamaProvider.js.map