@propio-ai/providers 0.1.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/dist/config.d.ts +91 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +2 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/configFile.d.ts +22 -0
  8. package/dist/configFile.d.ts.map +1 -0
  9. package/dist/configFile.js +33 -0
  10. package/dist/configFile.js.map +1 -0
  11. package/dist/configValidation.d.ts +34 -0
  12. package/dist/configValidation.d.ts.map +1 -0
  13. package/dist/configValidation.js +185 -0
  14. package/dist/configValidation.js.map +1 -0
  15. package/dist/diagnostics.d.ts +29 -0
  16. package/dist/diagnostics.d.ts.map +1 -0
  17. package/dist/diagnostics.js +9 -0
  18. package/dist/diagnostics.js.map +1 -0
  19. package/dist/factory.d.ts +56 -0
  20. package/dist/factory.d.ts.map +1 -0
  21. package/dist/factory.js +162 -0
  22. package/dist/factory.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/interface.d.ts +36 -0
  28. package/dist/interface.d.ts.map +1 -0
  29. package/dist/interface.js +2 -0
  30. package/dist/interface.js.map +1 -0
  31. package/dist/internal/baseProvider.d.ts +20 -0
  32. package/dist/internal/baseProvider.d.ts.map +1 -0
  33. package/dist/internal/baseProvider.js +13 -0
  34. package/dist/internal/baseProvider.js.map +1 -0
  35. package/dist/internal/capabilities.d.ts +4 -0
  36. package/dist/internal/capabilities.d.ts.map +1 -0
  37. package/dist/internal/capabilities.js +12 -0
  38. package/dist/internal/capabilities.js.map +1 -0
  39. package/dist/internal/jsonFile.d.ts +11 -0
  40. package/dist/internal/jsonFile.d.ts.map +1 -0
  41. package/dist/internal/jsonFile.js +78 -0
  42. package/dist/internal/jsonFile.js.map +1 -0
  43. package/dist/internal/openAiCompatibleProvider.d.ts +44 -0
  44. package/dist/internal/openAiCompatibleProvider.d.ts.map +1 -0
  45. package/dist/internal/openAiCompatibleProvider.js +93 -0
  46. package/dist/internal/openAiCompatibleProvider.js.map +1 -0
  47. package/dist/internal/openAiStream.d.ts +13 -0
  48. package/dist/internal/openAiStream.d.ts.map +1 -0
  49. package/dist/internal/openAiStream.js +85 -0
  50. package/dist/internal/openAiStream.js.map +1 -0
  51. package/dist/internal/shared.d.ts +79 -0
  52. package/dist/internal/shared.d.ts.map +1 -0
  53. package/dist/internal/shared.js +250 -0
  54. package/dist/internal/shared.js.map +1 -0
  55. package/dist/internal/withRetry.d.ts +25 -0
  56. package/dist/internal/withRetry.d.ts.map +1 -0
  57. package/dist/internal/withRetry.js +46 -0
  58. package/dist/internal/withRetry.js.map +1 -0
  59. package/dist/providers/anthropic.d.ts +32 -0
  60. package/dist/providers/anthropic.d.ts.map +1 -0
  61. package/dist/providers/anthropic.js +435 -0
  62. package/dist/providers/anthropic.js.map +1 -0
  63. package/dist/providers/bedrock.d.ts +67 -0
  64. package/dist/providers/bedrock.d.ts.map +1 -0
  65. package/dist/providers/bedrock.js +442 -0
  66. package/dist/providers/bedrock.js.map +1 -0
  67. package/dist/providers/cloudflare.d.ts +40 -0
  68. package/dist/providers/cloudflare.d.ts.map +1 -0
  69. package/dist/providers/cloudflare.js +115 -0
  70. package/dist/providers/cloudflare.js.map +1 -0
  71. package/dist/providers/gemini.d.ts +57 -0
  72. package/dist/providers/gemini.d.ts.map +1 -0
  73. package/dist/providers/gemini.js +359 -0
  74. package/dist/providers/gemini.js.map +1 -0
  75. package/dist/providers/ollama.d.ts +67 -0
  76. package/dist/providers/ollama.d.ts.map +1 -0
  77. package/dist/providers/ollama.js +241 -0
  78. package/dist/providers/ollama.js.map +1 -0
  79. package/dist/providers/openrouter.d.ts +76 -0
  80. package/dist/providers/openrouter.d.ts.map +1 -0
  81. package/dist/providers/openrouter.js +571 -0
  82. package/dist/providers/openrouter.js.map +1 -0
  83. package/dist/providers/xai.d.ts +45 -0
  84. package/dist/providers/xai.d.ts.map +1 -0
  85. package/dist/providers/xai.js +371 -0
  86. package/dist/providers/xai.js.map +1 -0
  87. package/dist/types.d.ts +166 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +60 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +70 -0
@@ -0,0 +1,57 @@
1
+ import { ChatMessage, ChatRequest, ChatStreamEvent, ProviderError } from "../types.js";
2
+ import { type OpenAIMessageContentPart } from "../internal/shared.js";
3
+ import { OpenAiCompatibleProvider, type OpenAiCompatibleProviderOptions } from "../internal/openAiCompatibleProvider.js";
4
+ import type { ProviderCapabilities } from "../interface.js";
5
+ interface OpenAIMessage {
6
+ role: "user" | "assistant" | "system" | "tool";
7
+ content: string | OpenAIMessageContentPart[];
8
+ tool_calls?: Array<{
9
+ id: string;
10
+ type: "function";
11
+ function: {
12
+ name: string;
13
+ arguments: string;
14
+ };
15
+ extra_content?: {
16
+ google?: {
17
+ thought_signature?: string;
18
+ };
19
+ };
20
+ }>;
21
+ tool_call_id?: string;
22
+ }
23
+ /**
24
+ * Gemini implementation of LLMProvider using Google's OpenAI-compatible API.
25
+ */
26
+ export declare class GeminiProvider extends OpenAiCompatibleProvider {
27
+ readonly name = "gemini";
28
+ private readonly model;
29
+ private readonly apiKey;
30
+ private readonly retryConfig?;
31
+ private readonly onDiagnosticEvent?;
32
+ private streamContentBuffer;
33
+ constructor(options: OpenAiCompatibleProviderOptions);
34
+ getCapabilities(): ProviderCapabilities;
35
+ protected chatMessageToOpenAIMessage(msg: ChatMessage): OpenAIMessage;
36
+ protected translateError(error: unknown, response?: Response, _responseBody?: string): ProviderError;
37
+ private mapFinishReason;
38
+ private extractThoughtSignature;
39
+ private accumulateGeminiThoughtSignature;
40
+ private processGeminiToolCallsDelta;
41
+ private normalizeRepeatedGeminiToolName;
42
+ private buildGeminiToolCallsEvent;
43
+ private extractGeminiThinkingText;
44
+ private cleanGeminiThinkingText;
45
+ private resetGeminiStreamState;
46
+ private processGeminiStreamingContent;
47
+ private flushGeminiStreamContentBuffer;
48
+ private extractGeminiAssistantText;
49
+ private extractGeminiContentText;
50
+ private parseGeminiStreamChunk;
51
+ private createGeminiStreamReader;
52
+ private buildGeminiRequestBody;
53
+ private fetchGeminiStream;
54
+ streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,WAAW,EACX,eAAe,EAGf,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAUL,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,EACrC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAS5D,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,wBAAwB,EAAE,CAAC;IAC7C,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9C,aAAa,CAAC,EAAE;YACd,MAAM,CAAC,EAAE;gBACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;aAC5B,CAAC;SACH,CAAC;KACH,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA+DD;;GAEG;AACH,qBAAa,cAAe,SAAQ,wBAAwB;IAC1D,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAG3B;IACF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAA6B;IAChE,OAAO,CAAC,mBAAmB,CAAM;gBAErB,OAAO,EAAE,+BAA+B;IAmBpD,eAAe,IAAI,oBAAoB;IASvC,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa;IAwBrE,SAAS,CAAC,cAAc,CACtB,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,aAAa;IAWhB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,gCAAgC;IAYxC,OAAO,CAAC,2BAA2B;IAkBnC,OAAO,CAAC,+BAA+B;IAevC,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,6BAA6B;IA4CrC,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,sBAAsB;YAwChB,wBAAwB;IAmBtC,OAAO,CAAC,sBAAsB;YAuBhB,iBAAiB;IA4BxB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;CA2CxE"}
@@ -0,0 +1,359 @@
1
+ import { ProviderAuthenticationError, ProviderError, } from "../types.js";
2
+ import { accumulateOpenAIStreamToolCall, applyOpenAIMessageCore, buildOpenAIChatCompletionRequestBody, buildOpenAIStreamToolCalls, createOpenAIMessageWithImages, createOpenAIToolCall, parseJsonMaybe, parseOpenAIStreamToolCallArguments, readSseDataLines, } from "../internal/shared.js";
3
+ import { fetchOpenAiCompatibleStreamReader } from "../internal/openAiStream.js";
4
+ import { OpenAiCompatibleProvider, } from "../internal/openAiCompatibleProvider.js";
5
+ const GEMINI_API_URL = "https://generativelanguage.googleapis.com/v1beta/openai/chat/completions";
6
+ const GEMINI_THOUGHT_TAG_PATTERN = /<\/?thought(?:\s[^>]*)?>/gi;
7
+ const GEMINI_THOUGHT_BLOCK_PATTERN = /<thought(?:\s[^>]*)?>([\s\S]*?)<\/thought>/gi;
8
+ const GEMINI_PARTIAL_THOUGHT_TAG_PATTERN = /<\/?(?:th(?:ought)?)?$/i;
9
+ /**
10
+ * Gemini implementation of LLMProvider using Google's OpenAI-compatible API.
11
+ */
12
+ export class GeminiProvider extends OpenAiCompatibleProvider {
13
+ constructor(options) {
14
+ super();
15
+ this.name = "gemini";
16
+ this.streamContentBuffer = "";
17
+ const apiKey = options.apiKey ??
18
+ process.env.GEMINI_API_KEY ??
19
+ process.env.GOOGLE_API_KEY ??
20
+ "";
21
+ if (!apiKey || apiKey.trim() === "") {
22
+ throw new ProviderAuthenticationError("Gemini API key is required. Set GEMINI_API_KEY or GOOGLE_API_KEY, or pass apiKey in options.");
23
+ }
24
+ this.model = options.model;
25
+ this.configureCapabilities(options.contextWindowTokens);
26
+ this.apiKey = apiKey;
27
+ this.retryConfig = options.retryConfig;
28
+ this.onDiagnosticEvent = options.onDiagnosticEvent;
29
+ }
30
+ getCapabilities() {
31
+ // Gemini validates assistant tool-call history against thought
32
+ // signatures, so fabricated tool-call rounds are rejected upstream.
33
+ return {
34
+ ...super.getCapabilities(),
35
+ supportsSyntheticToolCallHistory: false,
36
+ };
37
+ }
38
+ chatMessageToOpenAIMessage(msg) {
39
+ const out = createOpenAIMessageWithImages(msg);
40
+ applyOpenAIMessageCore(out, msg);
41
+ if (msg.toolCalls && msg.toolCalls.length > 0) {
42
+ out.tool_calls = msg.toolCalls.map((tc) => createOpenAIToolCall(tc, tc.thoughtSignature
43
+ ? {
44
+ extra_content: {
45
+ google: {
46
+ thought_signature: tc.thoughtSignature,
47
+ },
48
+ },
49
+ }
50
+ : undefined));
51
+ }
52
+ return out;
53
+ }
54
+ translateError(error, response, _responseBody) {
55
+ return this.translateStandardOpenAiError(error, response, {
56
+ model: this.model,
57
+ authenticationMessage: "Invalid Gemini API key",
58
+ rateLimitMessage: "Gemini rate limit exceeded",
59
+ serviceErrorMessage: "Gemini service error",
60
+ connectionErrorMessage: "Failed to connect to Gemini API",
61
+ requestFailedMessage: "Gemini request failed",
62
+ });
63
+ }
64
+ mapFinishReason(finishReason) {
65
+ if (finishReason === "MAX_TOKENS")
66
+ return "max_tokens";
67
+ if (finishReason === "STOP")
68
+ return "end_turn";
69
+ if (finishReason === "TOOL_CALLS")
70
+ return "tool_use";
71
+ if (finishReason === "SAFETY" ||
72
+ finishReason === "RECITATION" ||
73
+ finishReason === "OTHER")
74
+ return "error";
75
+ return "end_turn";
76
+ }
77
+ extractThoughtSignature(toolCall) {
78
+ return (toolCall.extra_content?.google?.thought_signature ??
79
+ toolCall.thought_signature ??
80
+ toolCall.thoughtSignature);
81
+ }
82
+ accumulateGeminiThoughtSignature(toolCall, toolCallsByIndex) {
83
+ const thoughtSignature = this.extractThoughtSignature(toolCall);
84
+ const index = toolCall.index ?? 0;
85
+ const accumulated = toolCallsByIndex.get(index);
86
+ if (accumulated && thoughtSignature && !accumulated.thoughtSignature) {
87
+ accumulated.thoughtSignature = thoughtSignature;
88
+ }
89
+ }
90
+ processGeminiToolCallsDelta(toolCallsDelta, toolCallsByIndex) {
91
+ if (!toolCallsDelta || !Array.isArray(toolCallsDelta)) {
92
+ return;
93
+ }
94
+ for (const toolCall of toolCallsDelta) {
95
+ accumulateOpenAIStreamToolCall(toolCall, toolCallsByIndex, () => ({
96
+ name: "",
97
+ argsString: "",
98
+ }));
99
+ this.normalizeRepeatedGeminiToolName(toolCall, toolCallsByIndex);
100
+ this.accumulateGeminiThoughtSignature(toolCall, toolCallsByIndex);
101
+ }
102
+ }
103
+ normalizeRepeatedGeminiToolName(toolCall, toolCallsByIndex) {
104
+ const name = toolCall.function?.name;
105
+ if (!name) {
106
+ return;
107
+ }
108
+ const accumulated = toolCallsByIndex.get(toolCall.index ?? 0);
109
+ if (accumulated?.name === `${name}${name}`) {
110
+ accumulated.name = name;
111
+ }
112
+ }
113
+ buildGeminiToolCallsEvent(toolCallsByIndex) {
114
+ if (toolCallsByIndex.size === 0) {
115
+ return null;
116
+ }
117
+ return {
118
+ type: "tool_calls",
119
+ toolCalls: buildOpenAIStreamToolCalls(toolCallsByIndex, (acc) => ({
120
+ id: acc.id,
121
+ thoughtSignature: acc.thoughtSignature,
122
+ function: {
123
+ name: acc.name || "",
124
+ arguments: parseOpenAIStreamToolCallArguments(acc.argsString),
125
+ },
126
+ })),
127
+ };
128
+ }
129
+ extractGeminiThinkingText(delta) {
130
+ const directThinking = [
131
+ delta.reasoning_content,
132
+ delta.reasoning,
133
+ delta.thought,
134
+ delta.thought_summary,
135
+ delta.extra_content?.google?.reasoning_content,
136
+ delta.extra_content?.google?.thought,
137
+ delta.extra_content?.google?.thought_summary,
138
+ delta.extra_content?.google?.thinking,
139
+ ]
140
+ .filter((value) => typeof value === "string")
141
+ .join("");
142
+ const reasoningDetails = delta.reasoning_details
143
+ ?.map((detail) => {
144
+ if (typeof detail.text === "string") {
145
+ return detail.text;
146
+ }
147
+ if (typeof detail.summary === "string") {
148
+ return detail.summary;
149
+ }
150
+ return "";
151
+ })
152
+ .join("") ?? "";
153
+ const thoughtParts = Array.isArray(delta.content)
154
+ ? delta.content
155
+ .filter((part) => part.thought === true)
156
+ .map((part) => part.text ?? "")
157
+ .join("")
158
+ : "";
159
+ return this.cleanGeminiThinkingText(`${directThinking}${reasoningDetails}${thoughtParts}`);
160
+ }
161
+ cleanGeminiThinkingText(text) {
162
+ return text.replace(GEMINI_THOUGHT_TAG_PATTERN, "");
163
+ }
164
+ resetGeminiStreamState() {
165
+ this.streamContentBuffer = "";
166
+ }
167
+ processGeminiStreamingContent(chunk) {
168
+ this.streamContentBuffer += chunk;
169
+ const buffer = this.streamContentBuffer;
170
+ let thinking = "";
171
+ let assistant = "";
172
+ let consumed = 0;
173
+ GEMINI_THOUGHT_BLOCK_PATTERN.lastIndex = 0;
174
+ for (const match of buffer.matchAll(GEMINI_THOUGHT_BLOCK_PATTERN)) {
175
+ if (match.index === undefined) {
176
+ continue;
177
+ }
178
+ assistant += buffer.slice(consumed, match.index);
179
+ thinking += match[1] ?? "";
180
+ consumed = match.index + match[0].length;
181
+ }
182
+ const tail = buffer.slice(consumed);
183
+ const openThoughtMatch = tail.match(/<thought(?:\s[^>]*)?>/i);
184
+ if (openThoughtMatch?.index !== undefined) {
185
+ assistant += tail.slice(0, openThoughtMatch.index);
186
+ this.streamContentBuffer = tail.slice(openThoughtMatch.index);
187
+ }
188
+ else {
189
+ const partialTagMatch = tail.match(GEMINI_PARTIAL_THOUGHT_TAG_PATTERN);
190
+ if (partialTagMatch?.index !== undefined) {
191
+ assistant += tail.slice(0, partialTagMatch.index);
192
+ this.streamContentBuffer = tail.slice(partialTagMatch.index);
193
+ }
194
+ else {
195
+ assistant += tail;
196
+ this.streamContentBuffer = "";
197
+ }
198
+ }
199
+ return {
200
+ thinking: this.cleanGeminiThinkingText(thinking),
201
+ assistant: this.cleanGeminiThinkingText(assistant),
202
+ };
203
+ }
204
+ flushGeminiStreamContentBuffer() {
205
+ if (this.streamContentBuffer.length === 0) {
206
+ return { thinking: "", assistant: "" };
207
+ }
208
+ const tail = this.streamContentBuffer;
209
+ this.streamContentBuffer = "";
210
+ const cleaned = this.cleanGeminiThinkingText(tail);
211
+ if (/<thought/i.test(tail)) {
212
+ return { thinking: cleaned, assistant: "" };
213
+ }
214
+ return { thinking: "", assistant: cleaned };
215
+ }
216
+ extractGeminiAssistantText(delta) {
217
+ if (typeof delta.content === "string") {
218
+ return "";
219
+ }
220
+ if (!Array.isArray(delta.content)) {
221
+ return "";
222
+ }
223
+ return this.cleanGeminiThinkingText(delta.content
224
+ .filter((part) => part.thought !== true)
225
+ .map((part) => part.text ?? "")
226
+ .join(""));
227
+ }
228
+ extractGeminiContentText(delta) {
229
+ if (typeof delta.content === "string") {
230
+ return this.processGeminiStreamingContent(delta.content);
231
+ }
232
+ return {
233
+ thinking: "",
234
+ assistant: this.extractGeminiAssistantText(delta),
235
+ };
236
+ }
237
+ parseGeminiStreamChunk(data, toolCallsByIndex) {
238
+ if (data === "[DONE]") {
239
+ return { events: [], done: true };
240
+ }
241
+ const choice = parseJsonMaybe(data)
242
+ ?.choices?.[0];
243
+ if (!choice?.delta) {
244
+ return { events: [], done: false };
245
+ }
246
+ const events = [];
247
+ const contentText = this.extractGeminiContentText(choice.delta);
248
+ const thinkingText = this.extractGeminiThinkingText(choice.delta) + contentText.thinking;
249
+ if (thinkingText.length > 0) {
250
+ events.push({ type: "thinking_delta", delta: thinkingText });
251
+ }
252
+ const assistantText = contentText.assistant;
253
+ if (assistantText.length > 0) {
254
+ events.push({ type: "assistant_text", delta: assistantText });
255
+ }
256
+ this.processGeminiToolCallsDelta(choice.delta.tool_calls ?? choice.delta.toolCalls, toolCallsByIndex);
257
+ return {
258
+ events,
259
+ stopReason: choice.finish_reason
260
+ ? this.mapFinishReason(choice.finish_reason)
261
+ : undefined,
262
+ done: false,
263
+ };
264
+ }
265
+ async createGeminiStreamReader(request) {
266
+ const body = this.buildGeminiRequestBody(request);
267
+ return fetchOpenAiCompatibleStreamReader({
268
+ body,
269
+ signal: request.signal,
270
+ fetchStream: (streamBody, signal) => this.fetchGeminiStream(streamBody, signal),
271
+ retryOptions: this.buildRetryOptions(request, this.model, this.retryConfig, this.onDiagnosticEvent),
272
+ translateError: (error) => this.translateError(error),
273
+ });
274
+ }
275
+ buildGeminiRequestBody(request) {
276
+ const effectiveModel = request.model || this.model;
277
+ return buildOpenAIChatCompletionRequestBody({
278
+ request,
279
+ model: effectiveModel,
280
+ mapMessage: (msg) => this.chatMessageToOpenAIMessage(msg),
281
+ mapTool: (tool) => this.chatToolToOpenAITool(tool),
282
+ extra: (body) => {
283
+ if (request.requestReasoning) {
284
+ body.extra_body = {
285
+ google: {
286
+ thinking_config: {
287
+ include_thoughts: true,
288
+ },
289
+ },
290
+ };
291
+ }
292
+ },
293
+ });
294
+ }
295
+ async fetchGeminiStream(body, signal) {
296
+ const res = await fetch(GEMINI_API_URL, {
297
+ method: "POST",
298
+ headers: {
299
+ Authorization: `Bearer ${this.apiKey}`,
300
+ "Content-Type": "application/json",
301
+ },
302
+ body: JSON.stringify(body),
303
+ signal,
304
+ });
305
+ if (!res.ok) {
306
+ let errorBody = "";
307
+ try {
308
+ errorBody = await res.text();
309
+ }
310
+ catch {
311
+ /* ignore read failures */
312
+ }
313
+ throw this.translateError(new Error(errorBody || `HTTP ${res.status}`), res);
314
+ }
315
+ return res;
316
+ }
317
+ async *streamChat(request) {
318
+ try {
319
+ this.resetGeminiStreamState();
320
+ const reader = await this.createGeminiStreamReader(request);
321
+ const toolCallsByIndex = new Map();
322
+ let stopReason = "end_turn";
323
+ for await (const data of readSseDataLines(reader)) {
324
+ const result = this.parseGeminiStreamChunk(data, toolCallsByIndex);
325
+ if (result.stopReason) {
326
+ stopReason = result.stopReason;
327
+ }
328
+ yield* result.events;
329
+ if (result.done) {
330
+ break;
331
+ }
332
+ }
333
+ const flushedContent = this.flushGeminiStreamContentBuffer();
334
+ if (flushedContent.thinking.length > 0) {
335
+ yield {
336
+ type: "thinking_delta",
337
+ delta: flushedContent.thinking,
338
+ };
339
+ }
340
+ if (flushedContent.assistant.length > 0) {
341
+ yield {
342
+ type: "assistant_text",
343
+ delta: flushedContent.assistant,
344
+ };
345
+ }
346
+ const toolCallsEvent = this.buildGeminiToolCallsEvent(toolCallsByIndex);
347
+ if (toolCallsEvent) {
348
+ yield toolCallsEvent;
349
+ }
350
+ yield { type: "terminal", stopReason };
351
+ }
352
+ catch (error) {
353
+ if (error instanceof ProviderError)
354
+ throw error;
355
+ throw this.translateError(error);
356
+ }
357
+ }
358
+ }
359
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { LLMProvider, ProviderCapabilities } from "../interface.js";
2
+ import { ChatRequest, ChatStreamEvent } from "../types.js";
3
+ import type { ProviderDiagnosticListener } from "../diagnostics.js";
4
+ /**
5
+ * Ollama implementation of LLMProvider
6
+ */
7
+ export declare class OllamaProvider implements LLMProvider {
8
+ readonly name = "ollama";
9
+ private ollama;
10
+ private model;
11
+ private capabilities;
12
+ private retryConfig?;
13
+ private onDiagnosticEvent?;
14
+ constructor(options: {
15
+ model: string;
16
+ contextWindowTokens: number;
17
+ host?: string;
18
+ retryConfig?: {
19
+ maxRetries: number;
20
+ consecutive529Limit: number;
21
+ };
22
+ onDiagnosticEvent?: ProviderDiagnosticListener;
23
+ });
24
+ getCapabilities(): ProviderCapabilities;
25
+ /**
26
+ * Resolve host with smart localhost→host.docker.internal conversion for sandbox mode
27
+ */
28
+ private resolveHost;
29
+ private isRetryableError;
30
+ private mapOllamaDoneReason;
31
+ private createOllamaMessages;
32
+ private createOllamaTools;
33
+ private createOllamaStream;
34
+ private processOllamaChunk;
35
+ private buildOllamaToolCallsEvent;
36
+ streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
37
+ /**
38
+ * Expand batched tool results into separate messages for Ollama.
39
+ * Ollama expects each tool result as a separate message, not batched like Bedrock.
40
+ */
41
+ private expandToolResults;
42
+ /**
43
+ * Translate ChatMessage to Ollama Message format
44
+ */
45
+ private chatMessageToOllamaMessage;
46
+ /**
47
+ * Translate Ollama Message to ChatMessage
48
+ */
49
+ private ollamaMessageToChatMessage;
50
+ /**
51
+ * Translate Ollama ToolCall to ChatToolCall
52
+ */
53
+ private ollamaToolCallToChatToolCall;
54
+ /**
55
+ * Translate ChatTool to Ollama Tool format
56
+ */
57
+ private chatToolToOllamaTool;
58
+ /**
59
+ * Determine stop reason from Ollama response
60
+ */
61
+ private getStopReason;
62
+ /**
63
+ * Translate errors to ProviderError types
64
+ */
65
+ private translateError;
66
+ }
67
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,EAEL,WAAW,EACX,eAAe,EAQhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAiEpE;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAsD;IAC1E,OAAO,CAAC,iBAAiB,CAAC,CAA6B;gBAE3C,OAAO,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,mBAAmB,EAAE,MAAM,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC;QAClE,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;KAChD;IAcD,eAAe,IAAI,oBAAoB;IAIvC;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,iBAAiB;YAIX,kBAAkB;IAsBhC,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,yBAAyB;IAW1B,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;IA8BvE;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA4BlC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IASpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,cAAc;CAavB"}