@jini-ai/agent-runtime 0.2.1 → 0.3.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.
- package/README.md +2 -2
- package/dist/agent-protocol/acp/session.d.ts +206 -1
- package/dist/agent-protocol/acp/session.d.ts.map +1 -1
- package/dist/agent-protocol/acp/session.js +505 -350
- package/dist/agent-protocol/acp/session.js.map +1 -1
- package/dist/agent-protocol/core/json-line-stream.d.ts +53 -0
- package/dist/agent-protocol/core/json-line-stream.d.ts.map +1 -1
- package/dist/agent-protocol/core/json-line-stream.js +307 -255
- package/dist/agent-protocol/core/json-line-stream.js.map +1 -1
- package/dist/agent-protocol/pi-rpc/events.d.ts +22 -1
- package/dist/agent-protocol/pi-rpc/events.d.ts.map +1 -1
- package/dist/agent-protocol/pi-rpc/events.js +189 -153
- package/dist/agent-protocol/pi-rpc/events.js.map +1 -1
- package/dist/agent-protocol/pi-rpc/session.d.ts +39 -0
- package/dist/agent-protocol/pi-rpc/session.d.ts.map +1 -1
- package/dist/agent-protocol/pi-rpc/session.js +143 -107
- package/dist/agent-protocol/pi-rpc/session.js.map +1 -1
- package/dist/claude-stream.d.ts +64 -1
- package/dist/claude-stream.d.ts.map +1 -1
- package/dist/claude-stream.js +568 -441
- package/dist/claude-stream.js.map +1 -1
- package/dist/defs/aider.d.ts.map +1 -1
- package/dist/defs/aider.js +13 -1
- package/dist/defs/aider.js.map +1 -1
- package/dist/defs/amp.d.ts.map +1 -1
- package/dist/defs/amp.js +16 -1
- package/dist/defs/amp.js.map +1 -1
- package/dist/defs/amr.d.ts +2 -1
- package/dist/defs/amr.d.ts.map +1 -1
- package/dist/defs/amr.js +12 -1
- package/dist/defs/amr.js.map +1 -1
- package/dist/defs/antigravity.d.ts +41 -2
- package/dist/defs/antigravity.d.ts.map +1 -1
- package/dist/defs/antigravity.js +201 -22
- package/dist/defs/antigravity.js.map +1 -1
- package/dist/defs/claude.d.ts +2 -0
- package/dist/defs/claude.d.ts.map +1 -1
- package/dist/defs/claude.js +58 -3
- package/dist/defs/claude.js.map +1 -1
- package/dist/defs/codebuddy.d.ts.map +1 -1
- package/dist/defs/codebuddy.js +9 -1
- package/dist/defs/codebuddy.js.map +1 -1
- package/dist/defs/codex.d.ts +1 -0
- package/dist/defs/codex.d.ts.map +1 -1
- package/dist/defs/codex.js +34 -0
- package/dist/defs/codex.js.map +1 -1
- package/dist/defs/copilot.d.ts.map +1 -1
- package/dist/defs/copilot.js +15 -1
- package/dist/defs/copilot.js.map +1 -1
- package/dist/defs/cursor-agent.d.ts.map +1 -1
- package/dist/defs/cursor-agent.js +24 -2
- package/dist/defs/cursor-agent.js.map +1 -1
- package/dist/defs/deepseek.d.ts.map +1 -1
- package/dist/defs/deepseek.js +12 -0
- package/dist/defs/deepseek.js.map +1 -1
- package/dist/defs/devin.d.ts +2 -1
- package/dist/defs/devin.d.ts.map +1 -1
- package/dist/defs/devin.js +12 -7
- package/dist/defs/devin.js.map +1 -1
- package/dist/defs/grok-build.d.ts.map +1 -1
- package/dist/defs/grok-build.js +10 -0
- package/dist/defs/grok-build.js.map +1 -1
- package/dist/defs/hermes.d.ts +1 -0
- package/dist/defs/hermes.d.ts.map +1 -1
- package/dist/defs/hermes.js +3 -0
- package/dist/defs/hermes.js.map +1 -1
- package/dist/defs/kilo.d.ts +1 -0
- package/dist/defs/kilo.d.ts.map +1 -1
- package/dist/defs/kilo.js +3 -0
- package/dist/defs/kilo.js.map +1 -1
- package/dist/defs/kimi.d.ts +1 -0
- package/dist/defs/kimi.d.ts.map +1 -1
- package/dist/defs/kimi.js +3 -0
- package/dist/defs/kimi.js.map +1 -1
- package/dist/defs/kiro.d.ts +1 -0
- package/dist/defs/kiro.d.ts.map +1 -1
- package/dist/defs/kiro.js +3 -0
- package/dist/defs/kiro.js.map +1 -1
- package/dist/defs/pi.d.ts +1 -1
- package/dist/defs/pi.d.ts.map +1 -1
- package/dist/defs/pi.js +6 -1
- package/dist/defs/pi.js.map +1 -1
- package/dist/defs/qoder.d.ts +1 -0
- package/dist/defs/qoder.d.ts.map +1 -1
- package/dist/defs/qoder.js +15 -0
- package/dist/defs/qoder.js.map +1 -1
- package/dist/defs/qwen.d.ts.map +1 -1
- package/dist/defs/qwen.js +9 -0
- package/dist/defs/qwen.js.map +1 -1
- package/dist/defs/reasonix.d.ts +1 -0
- package/dist/defs/reasonix.d.ts.map +1 -1
- package/dist/defs/reasonix.js +3 -0
- package/dist/defs/reasonix.js.map +1 -1
- package/dist/defs/shared.d.ts +31 -1
- package/dist/defs/shared.d.ts.map +1 -1
- package/dist/defs/shared.js +35 -0
- package/dist/defs/shared.js.map +1 -1
- package/dist/defs/trae-cli.d.ts +1 -0
- package/dist/defs/trae-cli.d.ts.map +1 -1
- package/dist/defs/trae-cli.js +3 -0
- package/dist/defs/trae-cli.js.map +1 -1
- package/dist/defs/vibe.d.ts +1 -0
- package/dist/defs/vibe.d.ts.map +1 -1
- package/dist/defs/vibe.js +3 -0
- package/dist/defs/vibe.js.map +1 -1
- package/dist/detection.d.ts +1 -1
- package/dist/detection.d.ts.map +1 -1
- package/dist/detection.js +7 -2
- package/dist/detection.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/log-file.d.ts +23 -0
- package/dist/log-file.d.ts.map +1 -0
- package/dist/log-file.js +56 -0
- package/dist/log-file.js.map +1 -0
- package/dist/model-registry.d.ts +7 -45
- package/dist/model-registry.d.ts.map +1 -1
- package/dist/model-registry.js.map +1 -1
- package/dist/providers/anthropic-messages.d.ts +198 -6
- package/dist/providers/anthropic-messages.d.ts.map +1 -1
- package/dist/providers/anthropic-messages.js +317 -140
- package/dist/providers/anthropic-messages.js.map +1 -1
- package/dist/providers/azure-chat.d.ts +113 -3
- package/dist/providers/azure-chat.d.ts.map +1 -1
- package/dist/providers/azure-chat.js +114 -21
- package/dist/providers/azure-chat.js.map +1 -1
- package/dist/providers/connection-guard.d.ts +121 -1
- package/dist/providers/connection-guard.d.ts.map +1 -1
- package/dist/providers/connection-guard.js +205 -3
- package/dist/providers/connection-guard.js.map +1 -1
- package/dist/providers/connection-test.d.ts +62 -0
- package/dist/providers/connection-test.d.ts.map +1 -0
- package/dist/providers/connection-test.js +404 -0
- package/dist/providers/connection-test.js.map +1 -0
- package/dist/providers/elevenlabs.d.ts.map +1 -1
- package/dist/providers/elevenlabs.js +3 -2
- package/dist/providers/elevenlabs.js.map +1 -1
- package/dist/providers/google-messages.d.ts +208 -7
- package/dist/providers/google-messages.d.ts.map +1 -1
- package/dist/providers/google-messages.js +331 -105
- package/dist/providers/google-messages.js.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/model-catalog.d.ts.map +1 -1
- package/dist/providers/model-catalog.js +21 -0
- package/dist/providers/model-catalog.js.map +1 -1
- package/dist/providers/ollama-chat.d.ts +190 -1
- package/dist/providers/ollama-chat.d.ts.map +1 -1
- package/dist/providers/ollama-chat.js +319 -110
- package/dist/providers/ollama-chat.js.map +1 -1
- package/dist/providers/openai-chat.d.ts +222 -14
- package/dist/providers/openai-chat.d.ts.map +1 -1
- package/dist/providers/openai-chat.js +377 -128
- package/dist/providers/openai-chat.js.map +1 -1
- package/dist/providers/sse-decode.d.ts +2 -2
- package/dist/providers/sse-decode.js +2 -2
- package/dist/types.d.ts +169 -87
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -4
|
@@ -38,8 +38,11 @@
|
|
|
38
38
|
* module's tool-call loop kept the OpenAI-compatible wire shape for both the
|
|
39
39
|
* emitted lifecycle event and the continuation request — `tool_use` was
|
|
40
40
|
* never emitted, and the assistant/tool continuation messages used a
|
|
41
|
-
* stringified `arguments` blob
|
|
42
|
-
*
|
|
41
|
+
* stringified `arguments` blob plus a `type` discriminator that does not
|
|
42
|
+
* exist in Ollama's native tool-call schema. (Narrowed 2026-08-03: this note
|
|
43
|
+
* previously also named `id`/`tool_call_id` as nonexistent, which is wrong —
|
|
44
|
+
* see `OllamaMessageParam.tool_name`'s doc for what `api/types.go` actually
|
|
45
|
+
* declares. `type` is the only genuinely absent field.) Fixed: `tool_use` now
|
|
43
46
|
* fires for every resolved call as soon as the stream ends (see
|
|
44
47
|
* `runSingleOllamaRequest`), and `OllamaToolCallParam`/`OllamaMessageParam`
|
|
45
48
|
* now match Ollama's own documented shape (`arguments` as a native object,
|
|
@@ -59,9 +62,48 @@
|
|
|
59
62
|
* this repo's established practice elsewhere (e.g. `xai.ts` deliberately
|
|
60
63
|
* generalizing OD's OAuth-connect *shape* while dropping its OD-specific
|
|
61
64
|
* SuperGrok billing gate).
|
|
65
|
+
*
|
|
66
|
+
* **Image ("vision") support**, added for the same vision self-check use
|
|
67
|
+
* case as `anthropic-messages.ts` (see that module's doc). Ollama's real
|
|
68
|
+
* wire shape is genuinely unlike every other provider this repo's adapters
|
|
69
|
+
* touch: `Message.Images` (`github.com/ollama/ollama/blob/main/api/
|
|
70
|
+
* types.go`) is `[]ImageData` where `ImageData` is a raw Go `[]byte` —
|
|
71
|
+
* `encoding/json` marshals a byte slice as a **bare base64 string**, so
|
|
72
|
+
* there is no `data:` URI prefix and no `media_type` field at all (unlike
|
|
73
|
+
* Anthropic/OpenAI's wrapped-source shapes). Confirmed directly against that
|
|
74
|
+
* struct, not assumed from the "list of images" prose in `docs/api.md`.
|
|
75
|
+
*
|
|
76
|
+
* **Design decision: native `tool`-role images, not a synthetic follow-up
|
|
77
|
+
* turn.** A prior pass on this same task (see `ADS-memory/reports/refactors/
|
|
78
|
+
* 2026-08-03-image-send-capability.md`) found OpenAI/Azure/Google's `tool`-
|
|
79
|
+
* role message is documented text-only, so those three need a synthetic
|
|
80
|
+
* `user`-role follow-up turn to carry an image at all. Ollama does not need
|
|
81
|
+
* that workaround — verified, not assumed, against two independent pieces of
|
|
82
|
+
* real server-side evidence: (1) `api/types.go`'s `Message` struct puts
|
|
83
|
+
* `Images` at the same level as `Role`/`Content`/`ToolName`, with no
|
|
84
|
+
* role-conditional field; (2) `server/prompt.go`'s `imageTaggedMessages`
|
|
85
|
+
* function, which actually builds the model prompt, iterates every message
|
|
86
|
+
* regardless of `Role` and reads `msg.Images` unconditionally — there is no
|
|
87
|
+
* `if msg.Role == "user"` gate anywhere near that read. A `tool`-role
|
|
88
|
+
* message's `images` field therefore reaches the model exactly like a
|
|
89
|
+
* `user`-role message's would. This makes Ollama's tool-result channel
|
|
90
|
+
* behave like Anthropic's (native), not like OpenAI/Azure/Google's
|
|
91
|
+
* (workaround required) — a third shape the prior pass's provider table
|
|
92
|
+
* did not anticipate, because Ollama was outside its original four-protocol
|
|
93
|
+
* scope.
|
|
94
|
+
*
|
|
95
|
+
* **`OllamaToolResult.isError` added alongside `images`, not purely a vision
|
|
96
|
+
* change.** Before this pass, every `tool_result` event and continuation
|
|
97
|
+
* message hardcoded `isError: false` regardless of what `executeTool`
|
|
98
|
+
* returned — `OllamaToolResult` had no `isError` field for a host to even
|
|
99
|
+
* set. That is a pre-existing gap independent of images, but this pass's own
|
|
100
|
+
* `guardToolResult` (see below) needs to signal a rejected/malformed image
|
|
101
|
+
* as an error the model can see, which is impossible without it. Wired
|
|
102
|
+
* through as `result.isError ?? false`, so every existing caller that never
|
|
103
|
+
* set `isError` keeps its exact prior behavior.
|
|
62
104
|
*/
|
|
63
105
|
import { createRoleMarkerGuard } from '../role-marker-guard.js';
|
|
64
|
-
import { defaultDnsLookup, redactSecrets, validateBaseUrlResolved } from './connection-guard.js';
|
|
106
|
+
import { defaultDnsLookup, pinnedFetch, redactSecrets, validateBaseUrlResolved } from './connection-guard.js';
|
|
65
107
|
import { createTurnEndGuard } from './turn-end-guard.js';
|
|
66
108
|
const DEFAULT_OLLAMA_BASE_URL = 'https://ollama.com';
|
|
67
109
|
const DEFAULT_MAX_TOOL_TURNS = 8;
|
|
@@ -106,65 +148,175 @@ function extractOllamaErrorDetail(rawText) {
|
|
|
106
148
|
return rawText.slice(0, 500);
|
|
107
149
|
}
|
|
108
150
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
151
|
+
* Validates one image string from a host-returned `OllamaToolResult.images` array. Returns the
|
|
152
|
+
* violation reason, or `null` when the string is legal to send.
|
|
153
|
+
*
|
|
154
|
+
* Deliberately narrower than `anthropic-messages.ts#invalidToolResultContentBlockReason`: no
|
|
155
|
+
* `media_type` allow-list (Ollama's wire shape has no such field to validate — see module doc), and
|
|
156
|
+
* no byte-size cap. The size guard was considered and rejected, not skipped reflexively: Anthropic's
|
|
157
|
+
* 10 MB figure came from a real, documented direct-API limit; no equivalent published figure exists
|
|
158
|
+
* for Ollama. A local install's real ceiling is whatever the host machine's memory allows (not a
|
|
159
|
+
* fixed vendor number this module could verify), and `OllamaTurnOptions.baseUrl`'s own documented
|
|
160
|
+
* default target — Ollama Cloud — is a remote, metered service too, but its docs likewise publish no
|
|
161
|
+
* per-image size limit as of this pass. Inventing a number in either case would be exactly the kind
|
|
162
|
+
* of memory-guess this repo's "verify against real docs" convention forbids (see module doc).
|
|
163
|
+
*
|
|
164
|
+
* What IS checked: the shape mistake an existing host is actually likely to make. A caller that
|
|
165
|
+
* already built an Anthropic/OpenAI-shaped payload elsewhere in the same codebase has a `data:`
|
|
166
|
+
* URI-prefixed or object-wrapped image sitting right there — pasting that into Ollama's `images`
|
|
167
|
+
* array (a bare base64 string, no wrapper) is a real, easy, silent mistake, not a hypothetical one.
|
|
168
|
+
*
|
|
169
|
+
* @complexity O(1) — a string-prefix check and a length check, no base64 decoding.
|
|
170
|
+
* @overallScore 100
|
|
115
171
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
let newlineIndex;
|
|
122
|
-
while ((newlineIndex = buffer.indexOf('\n')) >= 0) {
|
|
123
|
-
const line = buffer.slice(0, newlineIndex).trim();
|
|
124
|
-
buffer = buffer.slice(newlineIndex + 1);
|
|
125
|
-
if (!line)
|
|
126
|
-
continue;
|
|
127
|
-
try {
|
|
128
|
-
yield JSON.parse(line);
|
|
129
|
-
}
|
|
130
|
-
catch {
|
|
131
|
-
continue; // tolerate a malformed/empty keep-alive line
|
|
132
|
-
}
|
|
133
|
-
}
|
|
172
|
+
function invalidOllamaImageReason(image) {
|
|
173
|
+
if (image.length === 0)
|
|
174
|
+
return 'image must be a non-empty base64 string';
|
|
175
|
+
if (image.startsWith('data:')) {
|
|
176
|
+
return "image must be a bare base64 string with no `data:` URI prefix (Ollama's wire format has no media_type field — see module doc)";
|
|
134
177
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Runtime guard applied to every `OllamaToolExecutor` result before it is wired onto the outbound
|
|
182
|
+
* continuation message or reported via `onEvent` — same rationale and posture as
|
|
183
|
+
* `anthropic-messages.ts#guardToolResult` (host-owned executor, TS types don't constrain a buggy
|
|
184
|
+
* host at runtime; substitutes a legible `is_error` tool_result rather than forwarding a malformed
|
|
185
|
+
* image the server would reject with a less legible error).
|
|
186
|
+
*
|
|
187
|
+
* @complexity O(n) in the number of images; O(1) per image.
|
|
188
|
+
* @overallScore 100
|
|
189
|
+
*/
|
|
190
|
+
function guardToolResult(result) {
|
|
191
|
+
if (!result.images || result.images.length === 0)
|
|
192
|
+
return result;
|
|
193
|
+
for (const image of result.images) {
|
|
194
|
+
const reason = invalidOllamaImageReason(image);
|
|
195
|
+
if (reason) {
|
|
196
|
+
return { content: `[rejected tool result] ${reason}`, isError: true };
|
|
139
197
|
}
|
|
140
|
-
|
|
141
|
-
|
|
198
|
+
}
|
|
199
|
+
return result;
|
|
200
|
+
}
|
|
201
|
+
/** Parses one `function.arguments` value: Ollama's native tool-call payload documents it as a native JSON object, but a strict/older server can still send a stringified blob — this tolerates either, falling back to the raw string on malformed JSON. */
|
|
202
|
+
export function parseOllamaToolCallArguments(args) {
|
|
203
|
+
if (typeof args !== 'string')
|
|
204
|
+
return args;
|
|
205
|
+
try {
|
|
206
|
+
return JSON.parse(args);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return args;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/** Resolves one raw `message.tool_calls[]` entry into an `OllamaToolCall`, or `null` when the entry is missing its `function`/`name` (malformed, so skipped rather than surfaced). `index` seeds the synthetic id fallback — see `OllamaToolCallParam`'s doc for why a call id is generated locally rather than trusted off the wire. */
|
|
213
|
+
export function resolveOllamaToolCall(rawCall, index) {
|
|
214
|
+
if (!isRecord(rawCall) || !isRecord(rawCall.function))
|
|
215
|
+
return null;
|
|
216
|
+
const name = typeof rawCall.function.name === 'string' ? rawCall.function.name : '';
|
|
217
|
+
if (!name)
|
|
218
|
+
return null;
|
|
219
|
+
const input = parseOllamaToolCallArguments(rawCall.function.arguments);
|
|
220
|
+
const id = typeof rawCall.id === 'string' && rawCall.id ? rawCall.id : `ollama-tool-${index}`;
|
|
221
|
+
return { id, name, input };
|
|
222
|
+
}
|
|
223
|
+
/** Resolves every entry in `message.tool_calls` into `state.toolCalls`, then marks `finishReason: 'tool_calls'` once at least one resolved — mirrors the original inline loop's behavior of setting `finishReason` after the whole batch rather than per-call. */
|
|
224
|
+
export function handleOllamaToolCallsField(state, message) {
|
|
225
|
+
if (!Array.isArray(message.tool_calls))
|
|
226
|
+
return;
|
|
227
|
+
for (const rawCall of message.tool_calls) {
|
|
228
|
+
const call = resolveOllamaToolCall(rawCall, state.toolCalls.length);
|
|
229
|
+
if (call)
|
|
230
|
+
state.toolCalls.push(call);
|
|
231
|
+
}
|
|
232
|
+
if (state.toolCalls.length > 0)
|
|
233
|
+
state.finishReason = 'tool_calls';
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Feeds one `message.content` delta through the role-marker guard and emits the safe portion.
|
|
237
|
+
* Returns `'break'` once the guard flags contamination, otherwise `'continue'` — same contract as
|
|
238
|
+
* `anthropic-messages.ts#handleAnthropicTextDelta`/`openai-chat.ts#handleOpenAiTextContentDelta`.
|
|
239
|
+
*/
|
|
240
|
+
export function handleOllamaTextContent(state, content, onEvent) {
|
|
241
|
+
const safe = state.guard.feedText(content);
|
|
242
|
+
if (safe.length > 0) {
|
|
243
|
+
state.fullText += safe;
|
|
244
|
+
onEvent({ type: 'text_delta', delta: safe });
|
|
245
|
+
}
|
|
246
|
+
if (!state.guard.contaminated)
|
|
247
|
+
return 'continue';
|
|
248
|
+
const warn = state.guard.warningEvent();
|
|
249
|
+
if (warn)
|
|
250
|
+
onEvent(warn);
|
|
251
|
+
return 'break';
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Reduces one already-parsed NDJSON line into `state`, reporting whether the caller's line loop
|
|
255
|
+
* should stop and, if so, why. `'break'` calls `emitEnd('contaminated')` itself (mirroring the
|
|
256
|
+
* `content`-delta contamination path being the only in-loop `emitEnd` call site in every sibling
|
|
257
|
+
* provider); `'done'` reports the terminal `done: true` line with no `emitEnd` call of its own —
|
|
258
|
+
* the caller (`runSingleOllamaRequest`) still owns the normal-completion `emitEnd`, exactly like
|
|
259
|
+
* every sibling turn-runner's `emitEnd` contract.
|
|
260
|
+
*/
|
|
261
|
+
export function processOllamaLine(state, line, onEvent, emitEnd) {
|
|
262
|
+
const message = isRecord(line.message) ? line.message : null;
|
|
263
|
+
if (message && typeof message.content === 'string' && message.content.length > 0) {
|
|
264
|
+
if (handleOllamaTextContent(state, message.content, onEvent) === 'break') {
|
|
265
|
+
state.finishReason = 'contaminated';
|
|
266
|
+
emitEnd('contaminated');
|
|
267
|
+
return 'break';
|
|
142
268
|
}
|
|
143
269
|
}
|
|
270
|
+
if (message)
|
|
271
|
+
handleOllamaToolCallsField(state, message);
|
|
272
|
+
if (line.done === true) {
|
|
273
|
+
if (state.finishReason !== 'contaminated' && state.finishReason !== 'tool_calls')
|
|
274
|
+
state.finishReason = 'stop';
|
|
275
|
+
return 'done';
|
|
276
|
+
}
|
|
277
|
+
return 'continue';
|
|
144
278
|
}
|
|
145
|
-
/**
|
|
146
|
-
|
|
279
|
+
/** Emitted for every resolved call as soon as the stream ends, independent of whether the caller actually supplied an `executeTool` — see AUD-R4-002 fix note in the module doc. */
|
|
280
|
+
function emitPendingOllamaToolUseEvents(toolCalls, onEvent) {
|
|
281
|
+
for (const call of toolCalls) {
|
|
282
|
+
onEvent({ type: 'tool_use', id: call.id, name: call.name, input: call.input });
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Validates `options.baseUrl` and opens the streaming POST, returning the response's readable body
|
|
287
|
+
* once every pre-stream failure mode (SSRF-guard rejection, network error, non-2xx status, missing
|
|
288
|
+
* body) has been ruled out. Calls `emitEnd('error')` and returns `null` itself on any of those —
|
|
289
|
+
* the caller only has to check for `null` — same split as
|
|
290
|
+
* `anthropic-messages.ts#openAnthropicResponseStream`.
|
|
291
|
+
*/
|
|
292
|
+
async function openOllamaResponseStream(options, messages, emitEnd) {
|
|
147
293
|
const { onEvent } = options;
|
|
148
|
-
const baseUrlCheck = await validateBaseUrlResolved(options.baseUrl ?? DEFAULT_OLLAMA_BASE_URL, defaultDnsLookup);
|
|
294
|
+
const baseUrlCheck = await validateBaseUrlResolved(options.baseUrl ?? DEFAULT_OLLAMA_BASE_URL, options.dnsLookup ?? defaultDnsLookup);
|
|
149
295
|
if (baseUrlCheck.error) {
|
|
150
296
|
onEvent({ type: 'error', message: baseUrlCheck.error });
|
|
151
297
|
emitEnd('error');
|
|
152
|
-
return
|
|
298
|
+
return null;
|
|
153
299
|
}
|
|
154
300
|
let response;
|
|
155
301
|
try {
|
|
156
|
-
response =
|
|
302
|
+
response = await (options.fetchImpl ?? pinnedFetch)(ollamaRequestUrl(options.baseUrl), {
|
|
157
303
|
method: 'POST',
|
|
158
304
|
headers: ollamaHeaders(options),
|
|
159
305
|
body: JSON.stringify(ollamaRequestBody(options, messages)),
|
|
306
|
+
// Unlike the other three providers, this call never set `redirect: 'error'` even before
|
|
307
|
+
// this pinning change — the reviewer's redirect-rebinding finding was only reported (and
|
|
308
|
+
// fixed) for `openai-chat.ts`. `pinnedFetch` closes it here regardless, the same way it
|
|
309
|
+
// does everywhere else (`node:http`'s `request` never auto-follows); the flag is added for
|
|
310
|
+
// self-documentation, matching the other three call sites.
|
|
311
|
+
redirect: 'error',
|
|
160
312
|
...(options.signal ? { signal: options.signal } : {}),
|
|
161
|
-
})
|
|
313
|
+
}, baseUrlCheck.pinnedAddress);
|
|
162
314
|
}
|
|
163
315
|
catch (error) {
|
|
164
316
|
const message = error instanceof Error ? error.message : String(error);
|
|
165
317
|
onEvent({ type: 'error', message: redactSecrets(message, [options.apiKey]) });
|
|
166
318
|
emitEnd('error');
|
|
167
|
-
return
|
|
319
|
+
return null;
|
|
168
320
|
}
|
|
169
321
|
if (!response.ok) {
|
|
170
322
|
const rawText = await response.text();
|
|
@@ -174,72 +326,138 @@ async function runSingleOllamaRequest(options, messages, emitEnd) {
|
|
|
174
326
|
code: String(response.status),
|
|
175
327
|
});
|
|
176
328
|
emitEnd('error');
|
|
177
|
-
return
|
|
329
|
+
return null;
|
|
178
330
|
}
|
|
179
331
|
if (!response.body) {
|
|
180
332
|
onEvent({ type: 'error', message: 'Ollama response had no body' });
|
|
181
333
|
emitEnd('error');
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
return response.body;
|
|
337
|
+
}
|
|
338
|
+
/** Parses one NDJSON line, returning `undefined` for a malformed/empty line — JSON has no `undefined` literal, so a successful parse is never confused with a failed one. Extracted so the generator below never nests a `try`/`catch` inside its loops (see that function's doc). */
|
|
339
|
+
export function parseNdjsonLine(line) {
|
|
340
|
+
try {
|
|
341
|
+
return JSON.parse(line);
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
return undefined;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/** Splits already-accumulated buffer content into complete newline-terminated lines (newline stripped) plus the remaining partial-line `remainder`. Pure — no I/O — so this buffering/splitting logic is exercised as plain value-in/value-out assertions instead of through the full streaming generator. */
|
|
348
|
+
export function splitNdjsonLines(buffer) {
|
|
349
|
+
const lines = [];
|
|
350
|
+
let rest = buffer;
|
|
351
|
+
let newlineIndex;
|
|
352
|
+
while ((newlineIndex = rest.indexOf('\n')) >= 0) {
|
|
353
|
+
lines.push(rest.slice(0, newlineIndex));
|
|
354
|
+
rest = rest.slice(newlineIndex + 1);
|
|
355
|
+
}
|
|
356
|
+
return { lines, remainder: rest };
|
|
357
|
+
}
|
|
358
|
+
/** Trims and parses each complete line in `rawLines`, yielding only the ones that parsed to something other than `undefined` — a plain (non-async) generator so `decodeNdjsonStream` below can delegate to it with `yield*` instead of nesting a `for`/`if`/`if` inside its own `for await` loop. */
|
|
359
|
+
export function* parseNdjsonLines(rawLines) {
|
|
360
|
+
for (const rawLine of rawLines) {
|
|
361
|
+
const line = rawLine.trim();
|
|
362
|
+
if (!line)
|
|
363
|
+
continue; // tolerate a malformed/empty keep-alive line
|
|
364
|
+
const parsed = parseNdjsonLine(line);
|
|
365
|
+
if (parsed !== undefined)
|
|
366
|
+
yield parsed;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Reads a `fetch` response body as newline-delimited JSON, yielding one
|
|
371
|
+
* parsed line at a time. Buffers partial lines across chunk boundaries — an
|
|
372
|
+
* NDJSON line is not guaranteed to arrive in a single chunk. A trailing,
|
|
373
|
+
* unterminated final line (no closing newline) is still yielded once the
|
|
374
|
+
* stream ends, matching `sse-decode.ts#decodeSseStream`'s equivalent
|
|
375
|
+
* tolerance for the SSE case.
|
|
376
|
+
*/
|
|
377
|
+
async function* decodeNdjsonStream(body) {
|
|
378
|
+
const decoder = new TextDecoder();
|
|
379
|
+
let buffer = '';
|
|
380
|
+
for await (const chunk of body) {
|
|
381
|
+
buffer += typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });
|
|
382
|
+
const { lines, remainder } = splitNdjsonLines(buffer);
|
|
383
|
+
buffer = remainder;
|
|
384
|
+
yield* parseNdjsonLines(lines);
|
|
385
|
+
}
|
|
386
|
+
const trailing = buffer.trim();
|
|
387
|
+
if (!trailing)
|
|
388
|
+
return;
|
|
389
|
+
const parsed = parseNdjsonLine(trailing);
|
|
390
|
+
if (parsed !== undefined)
|
|
391
|
+
yield parsed; // else: final partial line was never completed — nothing usable to yield
|
|
392
|
+
}
|
|
393
|
+
/** Runs exactly one Ollama `/api/chat` NDJSON streaming request and reduces it into a single outcome. Mirrors `anthropic-messages.ts#runSingleAnthropicRequest`'s `emitEnd` contract — see that function's doc. */
|
|
394
|
+
async function runSingleOllamaRequest(options, messages, emitEnd) {
|
|
395
|
+
const { onEvent } = options;
|
|
396
|
+
const body = await openOllamaResponseStream(options, messages, emitEnd);
|
|
397
|
+
if (!body) {
|
|
182
398
|
return { finishReason: null, toolCalls: [], text: '' };
|
|
183
399
|
}
|
|
184
400
|
onEvent({ type: 'status', label: 'requesting' });
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
401
|
+
const state = {
|
|
402
|
+
guard: createRoleMarkerGuard('ollama-turn'),
|
|
403
|
+
toolCalls: [],
|
|
404
|
+
fullText: '',
|
|
405
|
+
finishReason: null,
|
|
406
|
+
};
|
|
407
|
+
for await (const line of decodeNdjsonStream(body)) {
|
|
190
408
|
if (!isRecord(line))
|
|
191
409
|
continue;
|
|
192
|
-
const
|
|
193
|
-
if (
|
|
194
|
-
const safe = guard.feedText(message.content);
|
|
195
|
-
if (safe.length > 0) {
|
|
196
|
-
fullText += safe;
|
|
197
|
-
onEvent({ type: 'text_delta', delta: safe });
|
|
198
|
-
}
|
|
199
|
-
if (guard.contaminated) {
|
|
200
|
-
const warn = guard.warningEvent();
|
|
201
|
-
if (warn)
|
|
202
|
-
onEvent(warn);
|
|
203
|
-
finishReason = 'contaminated';
|
|
204
|
-
emitEnd('contaminated');
|
|
205
|
-
break;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
if (message && Array.isArray(message.tool_calls)) {
|
|
209
|
-
for (const rawCall of message.tool_calls) {
|
|
210
|
-
if (!isRecord(rawCall) || !isRecord(rawCall.function))
|
|
211
|
-
continue;
|
|
212
|
-
const name = typeof rawCall.function.name === 'string' ? rawCall.function.name : '';
|
|
213
|
-
if (!name)
|
|
214
|
-
continue;
|
|
215
|
-
const args = rawCall.function.arguments;
|
|
216
|
-
const input = typeof args === 'string' ? (() => { try {
|
|
217
|
-
return JSON.parse(args);
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
return args;
|
|
221
|
-
} })() : args;
|
|
222
|
-
const id = typeof rawCall.id === 'string' && rawCall.id ? rawCall.id : `ollama-tool-${toolCalls.length}`;
|
|
223
|
-
toolCalls.push({ id, name, input });
|
|
224
|
-
}
|
|
225
|
-
if (toolCalls.length > 0)
|
|
226
|
-
finishReason = 'tool_calls';
|
|
227
|
-
}
|
|
228
|
-
if (line.done === true) {
|
|
229
|
-
if (finishReason !== 'contaminated' && finishReason !== 'tool_calls')
|
|
230
|
-
finishReason = 'stop';
|
|
410
|
+
const result = processOllamaLine(state, line, onEvent, emitEnd);
|
|
411
|
+
if (result === 'break' || result === 'done')
|
|
231
412
|
break;
|
|
232
|
-
}
|
|
233
413
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
414
|
+
if (state.finishReason === 'tool_calls') {
|
|
415
|
+
emitPendingOllamaToolUseEvents(state.toolCalls, onEvent);
|
|
416
|
+
}
|
|
417
|
+
return { finishReason: state.finishReason, toolCalls: state.toolCalls, text: state.fullText };
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Decides why the tool loop should stop after one request, or returns `null` when it should
|
|
421
|
+
* instead proceed to execute the pending tool calls — mirrors
|
|
422
|
+
* `anthropic-messages.ts#anthropicLoopExitReason`'s pure decision/effect split.
|
|
423
|
+
*/
|
|
424
|
+
export function ollamaLoopExitReason(outcome, toolTurns, maxToolTurns) {
|
|
425
|
+
if (outcome.finishReason !== 'tool_calls' || outcome.toolCalls.length === 0)
|
|
426
|
+
return 'stop';
|
|
427
|
+
if (toolTurns >= maxToolTurns)
|
|
428
|
+
return 'max_tool_turns';
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
/** Builds the assistant continuation's `tool_calls` field — Ollama's native shape has no `id`/`type` on the wire (see `OllamaToolCallParam`'s doc). */
|
|
432
|
+
export function buildOllamaAssistantToolCalls(toolCalls) {
|
|
433
|
+
return toolCalls.map((call) => ({ function: { name: call.name, arguments: call.input } }));
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Runs every pending tool call in order, applying `guardToolResult` and reducing the results into
|
|
437
|
+
* the `tool`-role continuation messages Ollama's native `tool_name`-association scheme expects —
|
|
438
|
+
* see module doc's "Design decision: native `tool`-role images" section for why no separate
|
|
439
|
+
* follow-up message is needed here, unlike `openai-chat.ts`/`azure-chat.ts`.
|
|
440
|
+
*/
|
|
441
|
+
export async function executeOllamaToolCalls(executeTool, calls, onEvent) {
|
|
442
|
+
const toolResultMessages = [];
|
|
443
|
+
for (const call of calls) {
|
|
444
|
+
const rawResult = await executeTool(call);
|
|
445
|
+
const result = guardToolResult(rawResult);
|
|
446
|
+
onEvent({
|
|
447
|
+
type: 'tool_result',
|
|
448
|
+
toolUseId: call.id,
|
|
449
|
+
content: result.content,
|
|
450
|
+
...(result.images ? { images: result.images } : {}),
|
|
451
|
+
isError: result.isError ?? false,
|
|
452
|
+
});
|
|
453
|
+
toolResultMessages.push({
|
|
454
|
+
role: 'tool',
|
|
455
|
+
content: result.content,
|
|
456
|
+
tool_name: call.name,
|
|
457
|
+
...(result.images ? { images: result.images } : {}),
|
|
458
|
+
});
|
|
241
459
|
}
|
|
242
|
-
return
|
|
460
|
+
return toolResultMessages;
|
|
243
461
|
}
|
|
244
462
|
/**
|
|
245
463
|
* Runs a full Ollama native `/api/chat` turn, including the tool-execution
|
|
@@ -249,6 +467,7 @@ async function runSingleOllamaRequest(options, messages, emitEnd) {
|
|
|
249
467
|
*/
|
|
250
468
|
export async function runOllamaToolTurn(options) {
|
|
251
469
|
const maxToolTurns = options.maxToolTurns ?? DEFAULT_MAX_TOOL_TURNS;
|
|
470
|
+
const executeTool = options.executeTool;
|
|
252
471
|
const endGuard = createTurnEndGuard(options.onEvent, (reason) => ({ type: 'end', reason }));
|
|
253
472
|
const emitEnd = endGuard.emitEnd;
|
|
254
473
|
let messages = options.messages.slice();
|
|
@@ -259,28 +478,18 @@ export async function runOllamaToolTurn(options) {
|
|
|
259
478
|
lastFinishReason = outcome.finishReason;
|
|
260
479
|
if (endGuard.hasEnded())
|
|
261
480
|
break;
|
|
262
|
-
|
|
263
|
-
|
|
481
|
+
const exitReason = ollamaLoopExitReason(outcome, toolTurns, maxToolTurns);
|
|
482
|
+
if (exitReason) {
|
|
483
|
+
emitEnd(exitReason);
|
|
264
484
|
break;
|
|
265
485
|
}
|
|
266
|
-
if (!
|
|
486
|
+
if (!executeTool) {
|
|
267
487
|
emitEnd('stop');
|
|
268
488
|
break;
|
|
269
489
|
}
|
|
270
|
-
if (toolTurns >= maxToolTurns) {
|
|
271
|
-
emitEnd('max_tool_turns');
|
|
272
|
-
break;
|
|
273
|
-
}
|
|
274
490
|
toolTurns += 1;
|
|
275
|
-
const assistantToolCalls = outcome.toolCalls
|
|
276
|
-
|
|
277
|
-
}));
|
|
278
|
-
const toolResultMessages = [];
|
|
279
|
-
for (const call of outcome.toolCalls) {
|
|
280
|
-
const result = await options.executeTool(call);
|
|
281
|
-
options.onEvent({ type: 'tool_result', toolUseId: call.id, content: result.content, isError: false });
|
|
282
|
-
toolResultMessages.push({ role: 'tool', content: result.content, tool_name: call.name });
|
|
283
|
-
}
|
|
491
|
+
const assistantToolCalls = buildOllamaAssistantToolCalls(outcome.toolCalls);
|
|
492
|
+
const toolResultMessages = await executeOllamaToolCalls(executeTool, outcome.toolCalls, options.onEvent);
|
|
284
493
|
messages = [
|
|
285
494
|
...messages,
|
|
286
495
|
{ role: 'assistant', content: outcome.text || null, tool_calls: assistantToolCalls },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama-chat.js","sourceRoot":"","sources":["../../src/providers/ollama-chat.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ollama-chat.js","sourceRoot":"","sources":["../../src/providers/ollama-chat.ts"],"names":[],"mappings":"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"}
|