@mariozechner/pi-ai 0.5.10

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.
@@ -0,0 +1,337 @@
1
+ import { FunctionCallingConfigMode, GoogleGenAI, } from "@google/genai";
2
+ import { calculateCost } from "../models.js";
3
+ export class GoogleLLM {
4
+ client;
5
+ model;
6
+ constructor(model, apiKey) {
7
+ if (!apiKey) {
8
+ if (!process.env.GEMINI_API_KEY) {
9
+ throw new Error("Gemini API key is required. Set GEMINI_API_KEY environment variable or pass it as an argument.");
10
+ }
11
+ apiKey = process.env.GEMINI_API_KEY;
12
+ }
13
+ this.client = new GoogleGenAI({ apiKey });
14
+ this.model = model;
15
+ }
16
+ getModel() {
17
+ return this.model;
18
+ }
19
+ async complete(context, options) {
20
+ try {
21
+ const contents = this.convertMessages(context.messages);
22
+ // Build generation config
23
+ const generationConfig = {};
24
+ if (options?.temperature !== undefined) {
25
+ generationConfig.temperature = options.temperature;
26
+ }
27
+ if (options?.maxTokens !== undefined) {
28
+ generationConfig.maxOutputTokens = options.maxTokens;
29
+ }
30
+ // Build the config object
31
+ const config = {
32
+ ...(Object.keys(generationConfig).length > 0 && generationConfig),
33
+ ...(context.systemPrompt && { systemInstruction: context.systemPrompt }),
34
+ ...(context.tools && { tools: this.convertTools(context.tools) }),
35
+ };
36
+ // Add tool config if needed
37
+ if (context.tools && options?.toolChoice) {
38
+ config.toolConfig = {
39
+ functionCallingConfig: {
40
+ mode: this.mapToolChoice(options.toolChoice),
41
+ },
42
+ };
43
+ }
44
+ // Add thinking config if enabled and model supports it
45
+ if (options?.thinking?.enabled && this.model.reasoning) {
46
+ config.thinkingConfig = {
47
+ includeThoughts: true,
48
+ ...(options.thinking.budgetTokens !== undefined && { thinkingBudget: options.thinking.budgetTokens }),
49
+ };
50
+ }
51
+ // Build the request parameters
52
+ const params = {
53
+ model: this.model.id,
54
+ contents,
55
+ config,
56
+ };
57
+ const stream = await this.client.models.generateContentStream(params);
58
+ let content = "";
59
+ let thinking = "";
60
+ let thoughtSignature;
61
+ const toolCalls = [];
62
+ let usage = {
63
+ input: 0,
64
+ output: 0,
65
+ cacheRead: 0,
66
+ cacheWrite: 0,
67
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
68
+ };
69
+ let stopReason = "stop";
70
+ let inTextBlock = false;
71
+ let inThinkingBlock = false;
72
+ // Process the stream
73
+ for await (const chunk of stream) {
74
+ // Extract parts from the chunk
75
+ const candidate = chunk.candidates?.[0];
76
+ if (candidate?.content?.parts) {
77
+ for (const part of candidate.content.parts) {
78
+ // Cast to any to access thinking properties not yet in SDK types
79
+ const partWithThinking = part;
80
+ if (partWithThinking.text !== undefined) {
81
+ // Check if it's thinking content using the thought boolean flag
82
+ if (partWithThinking.thought === true) {
83
+ if (inTextBlock) {
84
+ options?.onText?.("", true);
85
+ inTextBlock = false;
86
+ }
87
+ thinking += partWithThinking.text;
88
+ options?.onThinking?.(partWithThinking.text, false);
89
+ inThinkingBlock = true;
90
+ // Capture thought signature if present
91
+ if (partWithThinking.thoughtSignature) {
92
+ thoughtSignature = partWithThinking.thoughtSignature;
93
+ }
94
+ }
95
+ else {
96
+ if (inThinkingBlock) {
97
+ options?.onThinking?.("", true);
98
+ inThinkingBlock = false;
99
+ }
100
+ content += partWithThinking.text;
101
+ options?.onText?.(partWithThinking.text, false);
102
+ inTextBlock = true;
103
+ }
104
+ }
105
+ // Handle function calls
106
+ if (part.functionCall) {
107
+ if (inTextBlock) {
108
+ options?.onText?.("", true);
109
+ inTextBlock = false;
110
+ }
111
+ if (inThinkingBlock) {
112
+ options?.onThinking?.("", true);
113
+ inThinkingBlock = false;
114
+ }
115
+ // Gemini doesn't provide tool call IDs, so we need to generate them
116
+ // Use the function name as part of the ID for better debugging
117
+ const toolCallId = `${part.functionCall.name}_${Date.now()}`;
118
+ toolCalls.push({
119
+ id: toolCallId,
120
+ name: part.functionCall.name || "",
121
+ arguments: part.functionCall.args,
122
+ });
123
+ }
124
+ }
125
+ }
126
+ // Map finish reason
127
+ if (candidate?.finishReason) {
128
+ stopReason = this.mapStopReason(candidate.finishReason);
129
+ if (toolCalls.length > 0) {
130
+ stopReason = "toolUse";
131
+ }
132
+ }
133
+ // Capture usage metadata if available
134
+ if (chunk.usageMetadata) {
135
+ usage = {
136
+ input: chunk.usageMetadata.promptTokenCount || 0,
137
+ output: (chunk.usageMetadata.candidatesTokenCount || 0) + (chunk.usageMetadata.thoughtsTokenCount || 0),
138
+ cacheRead: chunk.usageMetadata.cachedContentTokenCount || 0,
139
+ cacheWrite: 0,
140
+ cost: {
141
+ input: 0,
142
+ output: 0,
143
+ cacheRead: 0,
144
+ cacheWrite: 0,
145
+ total: 0,
146
+ },
147
+ };
148
+ }
149
+ }
150
+ // Signal end of blocks
151
+ if (inTextBlock) {
152
+ options?.onText?.("", true);
153
+ }
154
+ if (inThinkingBlock) {
155
+ options?.onThinking?.("", true);
156
+ }
157
+ // Generate a thinking signature if we have thinking content but no signature from API
158
+ // This is needed for proper multi-turn conversations with thinking
159
+ if (thinking && !thoughtSignature) {
160
+ // Create a base64-encoded signature as Gemini expects
161
+ // In production, Gemini API should provide this
162
+ const encoder = new TextEncoder();
163
+ const data = encoder.encode(thinking);
164
+ // Create a simple hash-like signature and encode to base64
165
+ const signature = `gemini_thinking_${data.length}_${Date.now()}`;
166
+ thoughtSignature = Buffer.from(signature).toString("base64");
167
+ }
168
+ // Calculate cost
169
+ calculateCost(this.model, usage);
170
+ // Usage metadata is in the last chunk
171
+ // Already captured during streaming
172
+ return {
173
+ role: "assistant",
174
+ content: content || undefined,
175
+ thinking: thinking || undefined,
176
+ thinkingSignature: thoughtSignature,
177
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
178
+ provider: this.model.provider,
179
+ model: this.model.id,
180
+ usage,
181
+ stopReason,
182
+ };
183
+ }
184
+ catch (error) {
185
+ return {
186
+ role: "assistant",
187
+ provider: this.model.provider,
188
+ model: this.model.id,
189
+ usage: {
190
+ input: 0,
191
+ output: 0,
192
+ cacheRead: 0,
193
+ cacheWrite: 0,
194
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
195
+ },
196
+ stopReason: "error",
197
+ error: error instanceof Error ? error.message : String(error),
198
+ };
199
+ }
200
+ }
201
+ convertMessages(messages) {
202
+ const contents = [];
203
+ for (const msg of messages) {
204
+ if (msg.role === "user") {
205
+ // Handle both string and array content
206
+ if (typeof msg.content === "string") {
207
+ contents.push({
208
+ role: "user",
209
+ parts: [{ text: msg.content }],
210
+ });
211
+ }
212
+ else {
213
+ // Convert array content to Google format
214
+ const parts = msg.content.map((item) => {
215
+ if (item.type === "text") {
216
+ return { text: item.text };
217
+ }
218
+ else {
219
+ // Image content - Google uses inlineData
220
+ return {
221
+ inlineData: {
222
+ mimeType: item.mimeType,
223
+ data: item.data,
224
+ },
225
+ };
226
+ }
227
+ });
228
+ contents.push({
229
+ role: "user",
230
+ parts,
231
+ });
232
+ }
233
+ }
234
+ else if (msg.role === "assistant") {
235
+ const parts = [];
236
+ // Add thinking if present
237
+ // Note: We include thinkingSignature in our response for multi-turn context,
238
+ // but don't send it back to Gemini API as it may cause errors
239
+ if (msg.thinking) {
240
+ parts.push({
241
+ text: msg.thinking,
242
+ thought: true,
243
+ // Don't include thoughtSignature when sending back to API
244
+ // thoughtSignature: msg.thinkingSignature,
245
+ });
246
+ }
247
+ if (msg.content) {
248
+ parts.push({ text: msg.content });
249
+ }
250
+ if (msg.toolCalls) {
251
+ for (const toolCall of msg.toolCalls) {
252
+ parts.push({
253
+ functionCall: {
254
+ name: toolCall.name,
255
+ args: toolCall.arguments,
256
+ },
257
+ });
258
+ }
259
+ }
260
+ if (parts.length > 0) {
261
+ contents.push({
262
+ role: "model",
263
+ parts,
264
+ });
265
+ }
266
+ }
267
+ else if (msg.role === "toolResult") {
268
+ // Tool results are sent as function responses
269
+ // Extract function name from the tool call ID (format: "functionName_timestamp")
270
+ const functionName = msg.toolCallId.substring(0, msg.toolCallId.lastIndexOf("_"));
271
+ contents.push({
272
+ role: "user",
273
+ parts: [
274
+ {
275
+ functionResponse: {
276
+ name: functionName,
277
+ response: {
278
+ result: msg.content,
279
+ isError: msg.isError || false,
280
+ },
281
+ },
282
+ },
283
+ ],
284
+ });
285
+ }
286
+ }
287
+ return contents;
288
+ }
289
+ convertTools(tools) {
290
+ return [
291
+ {
292
+ functionDeclarations: tools.map((tool) => ({
293
+ name: tool.name,
294
+ description: tool.description,
295
+ parameters: tool.parameters,
296
+ })),
297
+ },
298
+ ];
299
+ }
300
+ mapToolChoice(choice) {
301
+ switch (choice) {
302
+ case "auto":
303
+ return FunctionCallingConfigMode.AUTO;
304
+ case "none":
305
+ return FunctionCallingConfigMode.NONE;
306
+ case "any":
307
+ return FunctionCallingConfigMode.ANY;
308
+ default:
309
+ return FunctionCallingConfigMode.AUTO;
310
+ }
311
+ }
312
+ mapStopReason(reason) {
313
+ switch (reason) {
314
+ case "STOP":
315
+ return "stop";
316
+ case "MAX_TOKENS":
317
+ return "length";
318
+ case "BLOCKLIST":
319
+ case "PROHIBITED_CONTENT":
320
+ case "SPII":
321
+ case "SAFETY":
322
+ case "IMAGE_SAFETY":
323
+ return "safety";
324
+ case "RECITATION":
325
+ return "safety";
326
+ case "FINISH_REASON_UNSPECIFIED":
327
+ case "OTHER":
328
+ case "LANGUAGE":
329
+ case "MALFORMED_FUNCTION_CALL":
330
+ case "UNEXPECTED_TOOL_CALL":
331
+ return "error";
332
+ default:
333
+ return "stop";
334
+ }
335
+ }
336
+ }
337
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { AssistantMessage, Context, LLM, LLMOptions, Model } from "../types.js";
2
+ export interface OpenAICompletionsLLMOptions extends LLMOptions {
3
+ toolChoice?: "auto" | "none" | "required" | {
4
+ type: "function";
5
+ function: {
6
+ name: string;
7
+ };
8
+ };
9
+ reasoningEffort?: "low" | "medium" | "high";
10
+ }
11
+ export declare class OpenAICompletionsLLM implements LLM<OpenAICompletionsLLMOptions> {
12
+ private client;
13
+ private modelInfo;
14
+ constructor(model: Model, apiKey?: string);
15
+ getModel(): Model;
16
+ complete(request: Context, options?: OpenAICompletionsLLMOptions): Promise<AssistantMessage>;
17
+ private convertMessages;
18
+ private convertTools;
19
+ private mapStopReason;
20
+ }
21
+ //# sourceMappingURL=openai-completions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-completions.d.ts","sourceRoot":"","sources":["../../src/providers/openai-completions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,gBAAgB,EAChB,OAAO,EACP,GAAG,EACH,UAAU,EAEV,KAAK,EAKL,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,2BAA4B,SAAQ,UAAU;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC7F,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC5C;AAED,qBAAa,oBAAqB,YAAW,GAAG,CAAC,2BAA2B,CAAC;IAC5E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAQ;gBAEb,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM;IAazC,QAAQ,IAAI,KAAK;IAIX,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+MlG,OAAO,CAAC,eAAe;IAiFvB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,aAAa;CAerB"}