@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,304 @@
1
+ import OpenAI from "openai";
2
+ import { calculateCost } from "../models.js";
3
+ export class OpenAICompletionsLLM {
4
+ client;
5
+ modelInfo;
6
+ constructor(model, apiKey) {
7
+ if (!apiKey) {
8
+ if (!process.env.OPENAI_API_KEY) {
9
+ throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass it as an argument.");
10
+ }
11
+ apiKey = process.env.OPENAI_API_KEY;
12
+ }
13
+ this.client = new OpenAI({ apiKey, baseURL: model.baseUrl });
14
+ this.modelInfo = model;
15
+ }
16
+ getModel() {
17
+ return this.modelInfo;
18
+ }
19
+ async complete(request, options) {
20
+ try {
21
+ const messages = this.convertMessages(request.messages, request.systemPrompt);
22
+ const params = {
23
+ model: this.modelInfo.id,
24
+ messages,
25
+ stream: true,
26
+ stream_options: { include_usage: true },
27
+ };
28
+ // Cerebras/xAI dont like the "store" field
29
+ if (!this.modelInfo.baseUrl?.includes("cerebras.ai") && !this.modelInfo.baseUrl?.includes("api.x.ai")) {
30
+ params.store = false;
31
+ }
32
+ if (options?.maxTokens) {
33
+ params.max_completion_tokens = options?.maxTokens;
34
+ }
35
+ if (options?.temperature !== undefined) {
36
+ params.temperature = options?.temperature;
37
+ }
38
+ if (request.tools) {
39
+ params.tools = this.convertTools(request.tools);
40
+ }
41
+ if (options?.toolChoice) {
42
+ params.tool_choice = options.toolChoice;
43
+ }
44
+ if (options?.reasoningEffort &&
45
+ this.modelInfo.reasoning &&
46
+ !this.modelInfo.id.toLowerCase().includes("grok")) {
47
+ params.reasoning_effort = options.reasoningEffort;
48
+ }
49
+ const stream = await this.client.chat.completions.create(params, {
50
+ signal: options?.signal,
51
+ });
52
+ let content = "";
53
+ let reasoningContent = "";
54
+ let reasoningField = null;
55
+ const parsedToolCalls = [];
56
+ let usage = {
57
+ input: 0,
58
+ output: 0,
59
+ cacheRead: 0,
60
+ cacheWrite: 0,
61
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
62
+ };
63
+ let finishReason = null;
64
+ let blockType = null;
65
+ for await (const chunk of stream) {
66
+ if (chunk.usage) {
67
+ usage = {
68
+ input: chunk.usage.prompt_tokens || 0,
69
+ output: (chunk.usage.completion_tokens || 0) +
70
+ (chunk.usage.completion_tokens_details?.reasoning_tokens || 0),
71
+ cacheRead: chunk.usage.prompt_tokens_details?.cached_tokens || 0,
72
+ cacheWrite: 0,
73
+ cost: {
74
+ input: 0,
75
+ output: 0,
76
+ cacheRead: 0,
77
+ cacheWrite: 0,
78
+ total: 0,
79
+ },
80
+ };
81
+ }
82
+ const choice = chunk.choices[0];
83
+ if (!choice)
84
+ continue;
85
+ if (choice.delta) {
86
+ // Handle text content
87
+ if (choice.delta.content !== null &&
88
+ choice.delta.content !== undefined &&
89
+ choice.delta.content.length > 0) {
90
+ if (blockType === "thinking") {
91
+ options?.onThinking?.("", true);
92
+ blockType = null;
93
+ }
94
+ content += choice.delta.content;
95
+ options?.onText?.(choice.delta.content, false);
96
+ blockType = "text";
97
+ }
98
+ // Handle reasoning_content field
99
+ if (choice.delta.reasoning_content !== null &&
100
+ choice.delta.reasoning_content !== undefined) {
101
+ if (blockType === "text") {
102
+ options?.onText?.("", true);
103
+ blockType = null;
104
+ }
105
+ reasoningContent += choice.delta.reasoning_content;
106
+ reasoningField = "reasoning_content";
107
+ options?.onThinking?.(choice.delta.reasoning_content, false);
108
+ blockType = "thinking";
109
+ }
110
+ // Handle reasoning field
111
+ if (choice.delta.reasoning !== null && choice.delta.reasoning !== undefined) {
112
+ if (blockType === "text") {
113
+ options?.onText?.("", true);
114
+ blockType = null;
115
+ }
116
+ reasoningContent += choice.delta.reasoning;
117
+ reasoningField = "reasoning";
118
+ options?.onThinking?.(choice.delta.reasoning, false);
119
+ blockType = "thinking";
120
+ }
121
+ // Handle tool calls
122
+ if (choice?.delta?.tool_calls) {
123
+ if (blockType === "text") {
124
+ options?.onText?.("", true);
125
+ blockType = null;
126
+ }
127
+ if (blockType === "thinking") {
128
+ options?.onThinking?.("", true);
129
+ blockType = null;
130
+ }
131
+ for (const toolCall of choice.delta.tool_calls) {
132
+ if (parsedToolCalls.length === 0 ||
133
+ (toolCall.id !== undefined && parsedToolCalls[parsedToolCalls.length - 1].id !== toolCall.id)) {
134
+ parsedToolCalls.push({
135
+ id: toolCall.id || "",
136
+ name: toolCall.function?.name || "",
137
+ arguments: "",
138
+ });
139
+ }
140
+ const current = parsedToolCalls[parsedToolCalls.length - 1];
141
+ if (toolCall.id)
142
+ current.id = toolCall.id;
143
+ if (toolCall.function?.name)
144
+ current.name = toolCall.function.name;
145
+ if (toolCall.function?.arguments) {
146
+ current.arguments += toolCall.function.arguments;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ // Capture finish reason
152
+ if (choice.finish_reason) {
153
+ if (blockType === "text") {
154
+ options?.onText?.("", true);
155
+ blockType = null;
156
+ }
157
+ if (blockType === "thinking") {
158
+ options?.onThinking?.("", true);
159
+ blockType = null;
160
+ }
161
+ finishReason = choice.finish_reason;
162
+ }
163
+ }
164
+ // Convert tool calls map to array
165
+ const toolCalls = parsedToolCalls.map((tc) => ({
166
+ id: tc.id,
167
+ name: tc.name,
168
+ arguments: JSON.parse(tc.arguments),
169
+ }));
170
+ // Calculate cost
171
+ calculateCost(this.modelInfo, usage);
172
+ return {
173
+ role: "assistant",
174
+ content: content || undefined,
175
+ thinking: reasoningContent || undefined,
176
+ thinkingSignature: reasoningField || undefined,
177
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
178
+ provider: this.modelInfo.provider,
179
+ model: this.modelInfo.id,
180
+ usage,
181
+ stopReason: this.mapStopReason(finishReason),
182
+ };
183
+ }
184
+ catch (error) {
185
+ return {
186
+ role: "assistant",
187
+ provider: this.modelInfo.provider,
188
+ model: this.modelInfo.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, systemPrompt) {
202
+ const params = [];
203
+ // Add system prompt if provided
204
+ if (systemPrompt) {
205
+ // Cerebras/xAi don't like the "developer" role
206
+ const useDeveloperRole = this.modelInfo.reasoning &&
207
+ !this.modelInfo.baseUrl?.includes("cerebras.ai") &&
208
+ !this.modelInfo.baseUrl?.includes("api.x.ai");
209
+ const role = useDeveloperRole ? "developer" : "system";
210
+ params.push({ role: role, content: systemPrompt });
211
+ }
212
+ // Convert messages
213
+ for (const msg of messages) {
214
+ if (msg.role === "user") {
215
+ // Handle both string and array content
216
+ if (typeof msg.content === "string") {
217
+ params.push({
218
+ role: "user",
219
+ content: msg.content,
220
+ });
221
+ }
222
+ else {
223
+ // Convert array content to OpenAI format
224
+ const content = msg.content.map((item) => {
225
+ if (item.type === "text") {
226
+ return {
227
+ type: "text",
228
+ text: item.text,
229
+ };
230
+ }
231
+ else {
232
+ // Image content - OpenAI uses data URLs
233
+ return {
234
+ type: "image_url",
235
+ image_url: {
236
+ url: `data:${item.mimeType};base64,${item.data}`,
237
+ },
238
+ };
239
+ }
240
+ });
241
+ params.push({
242
+ role: "user",
243
+ content,
244
+ });
245
+ }
246
+ }
247
+ else if (msg.role === "assistant") {
248
+ const assistantMsg = {
249
+ role: "assistant",
250
+ content: msg.content || null,
251
+ };
252
+ // LLama.cpp server + gpt-oss
253
+ if (msg.thinking && msg.thinkingSignature && msg.thinkingSignature.length > 0) {
254
+ assistantMsg[msg.thinkingSignature] = msg.thinking;
255
+ }
256
+ if (msg.toolCalls) {
257
+ assistantMsg.tool_calls = msg.toolCalls.map((tc) => ({
258
+ id: tc.id,
259
+ type: "function",
260
+ function: {
261
+ name: tc.name,
262
+ arguments: JSON.stringify(tc.arguments),
263
+ },
264
+ }));
265
+ }
266
+ params.push(assistantMsg);
267
+ }
268
+ else if (msg.role === "toolResult") {
269
+ params.push({
270
+ role: "tool",
271
+ content: msg.content,
272
+ tool_call_id: msg.toolCallId,
273
+ });
274
+ }
275
+ }
276
+ return params;
277
+ }
278
+ convertTools(tools) {
279
+ return tools.map((tool) => ({
280
+ type: "function",
281
+ function: {
282
+ name: tool.name,
283
+ description: tool.description,
284
+ parameters: tool.parameters,
285
+ },
286
+ }));
287
+ }
288
+ mapStopReason(reason) {
289
+ switch (reason) {
290
+ case "stop":
291
+ return "stop";
292
+ case "length":
293
+ return "length";
294
+ case "function_call":
295
+ case "tool_calls":
296
+ return "toolUse";
297
+ case "content_filter":
298
+ return "safety";
299
+ default:
300
+ return "stop";
301
+ }
302
+ }
303
+ }
304
+ //# sourceMappingURL=openai-completions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-completions.js","sourceRoot":"","sources":["../../src/providers/openai-completions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AssistantMessage, Context, LLM, LLMOptions, Model } from "../types.js";
2
+ export interface OpenAIResponsesLLMOptions extends LLMOptions {
3
+ reasoningEffort?: "minimal" | "low" | "medium" | "high";
4
+ reasoningSummary?: "auto" | "detailed" | "concise" | null;
5
+ }
6
+ export declare class OpenAIResponsesLLM implements LLM<OpenAIResponsesLLMOptions> {
7
+ private client;
8
+ private modelInfo;
9
+ constructor(model: Model, apiKey?: string);
10
+ getModel(): Model;
11
+ complete(request: Context, options?: OpenAIResponsesLLMOptions): Promise<AssistantMessage>;
12
+ private convertToInput;
13
+ private convertTools;
14
+ private mapStopReason;
15
+ }
16
+ //# sourceMappingURL=openai-responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,gBAAgB,EAChB,OAAO,EACP,GAAG,EACH,UAAU,EAEV,KAAK,EAKL,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IAC5D,eAAe,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxD,gBAAgB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;CAC1D;AAED,qBAAa,kBAAmB,YAAW,GAAG,CAAC,yBAAyB,CAAC;IACxE,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,yBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkJhG,OAAO,CAAC,cAAc;IAkFtB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;CAarB"}
@@ -0,0 +1,261 @@
1
+ import OpenAI from "openai";
2
+ export class OpenAIResponsesLLM {
3
+ client;
4
+ modelInfo;
5
+ constructor(model, apiKey) {
6
+ if (!apiKey) {
7
+ if (!process.env.OPENAI_API_KEY) {
8
+ throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass it as an argument.");
9
+ }
10
+ apiKey = process.env.OPENAI_API_KEY;
11
+ }
12
+ this.client = new OpenAI({ apiKey, baseURL: model.baseUrl });
13
+ this.modelInfo = model;
14
+ }
15
+ getModel() {
16
+ return this.modelInfo;
17
+ }
18
+ async complete(request, options) {
19
+ try {
20
+ const input = this.convertToInput(request.messages, request.systemPrompt);
21
+ const params = {
22
+ model: this.modelInfo.id,
23
+ input,
24
+ stream: true,
25
+ };
26
+ if (options?.maxTokens) {
27
+ params.max_output_tokens = options?.maxTokens;
28
+ }
29
+ if (options?.temperature !== undefined) {
30
+ params.temperature = options?.temperature;
31
+ }
32
+ if (request.tools) {
33
+ params.tools = this.convertTools(request.tools);
34
+ }
35
+ // Add reasoning options for models that support it
36
+ if (this.modelInfo?.reasoning && (options?.reasoningEffort || options?.reasoningSummary)) {
37
+ params.reasoning = {
38
+ effort: options?.reasoningEffort || "medium",
39
+ summary: options?.reasoningSummary || "auto",
40
+ };
41
+ params.include = ["reasoning.encrypted_content"];
42
+ }
43
+ const stream = await this.client.responses.create(params, {
44
+ signal: options?.signal,
45
+ });
46
+ let content = "";
47
+ let thinking = "";
48
+ const toolCalls = [];
49
+ const reasoningItems = [];
50
+ let usage = {
51
+ input: 0,
52
+ output: 0,
53
+ cacheRead: 0,
54
+ cacheWrite: 0,
55
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
56
+ };
57
+ let stopReason = "stop";
58
+ for await (const event of stream) {
59
+ // Handle reasoning summary for models that support it
60
+ if (event.type === "response.reasoning_summary_text.delta") {
61
+ const delta = event.delta;
62
+ thinking += delta;
63
+ options?.onThinking?.(delta, false);
64
+ }
65
+ else if (event.type === "response.reasoning_summary_text.done") {
66
+ if (event.text) {
67
+ thinking = event.text;
68
+ }
69
+ options?.onThinking?.("", true);
70
+ }
71
+ // Handle main text output
72
+ else if (event.type === "response.output_text.delta") {
73
+ const delta = event.delta;
74
+ content += delta;
75
+ options?.onText?.(delta, false);
76
+ }
77
+ else if (event.type === "response.output_text.done") {
78
+ if (event.text) {
79
+ content = event.text;
80
+ }
81
+ options?.onText?.("", true);
82
+ }
83
+ // Handle function calls
84
+ else if (event.type === "response.output_item.done") {
85
+ const item = event.item;
86
+ if (item?.type === "function_call") {
87
+ toolCalls.push({
88
+ id: item.call_id + "|" + item.id,
89
+ name: item.name,
90
+ arguments: JSON.parse(item.arguments),
91
+ });
92
+ }
93
+ if (item.type === "reasoning") {
94
+ reasoningItems.push(item);
95
+ }
96
+ }
97
+ // Handle completion
98
+ else if (event.type === "response.completed") {
99
+ const response = event.response;
100
+ if (response?.usage) {
101
+ usage = {
102
+ input: response.usage.input_tokens || 0,
103
+ output: response.usage.output_tokens || 0,
104
+ cacheRead: response.usage.input_tokens_details?.cached_tokens || 0,
105
+ cacheWrite: 0,
106
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
107
+ };
108
+ }
109
+ // Map status to stop reason
110
+ stopReason = this.mapStopReason(response?.status);
111
+ if (toolCalls.length > 0 && stopReason === "stop") {
112
+ stopReason = "toolUse";
113
+ }
114
+ }
115
+ // Handle errors
116
+ else if (event.type === "error") {
117
+ return {
118
+ role: "assistant",
119
+ provider: this.modelInfo.provider,
120
+ model: this.modelInfo.id,
121
+ usage,
122
+ stopReason: "error",
123
+ error: `Code ${event.code}: ${event.message}` || "Unknown error",
124
+ };
125
+ }
126
+ }
127
+ return {
128
+ role: "assistant",
129
+ content: content || undefined,
130
+ thinking: thinking || undefined,
131
+ thinkingSignature: JSON.stringify(reasoningItems) || undefined,
132
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
133
+ provider: this.modelInfo.provider,
134
+ model: this.modelInfo.id,
135
+ usage,
136
+ stopReason,
137
+ };
138
+ }
139
+ catch (error) {
140
+ return {
141
+ role: "assistant",
142
+ provider: this.modelInfo.provider,
143
+ model: this.modelInfo.id,
144
+ usage: {
145
+ input: 0,
146
+ output: 0,
147
+ cacheRead: 0,
148
+ cacheWrite: 0,
149
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
150
+ },
151
+ stopReason: "error",
152
+ error: error instanceof Error ? error.message : String(error),
153
+ };
154
+ }
155
+ }
156
+ convertToInput(messages, systemPrompt) {
157
+ const input = [];
158
+ // Add system prompt if provided
159
+ if (systemPrompt) {
160
+ const role = this.modelInfo?.reasoning ? "developer" : "system";
161
+ input.push({
162
+ role,
163
+ content: systemPrompt,
164
+ });
165
+ }
166
+ // Convert messages
167
+ for (const msg of messages) {
168
+ if (msg.role === "user") {
169
+ // Handle both string and array content
170
+ if (typeof msg.content === "string") {
171
+ input.push({
172
+ role: "user",
173
+ content: [{ type: "input_text", text: msg.content }],
174
+ });
175
+ }
176
+ else {
177
+ // Convert array content to OpenAI Responses format
178
+ const content = msg.content.map((item) => {
179
+ if (item.type === "text") {
180
+ return {
181
+ type: "input_text",
182
+ text: item.text,
183
+ };
184
+ }
185
+ else {
186
+ // Image content - OpenAI Responses uses data URLs
187
+ return {
188
+ type: "input_image",
189
+ detail: "auto",
190
+ image_url: `data:${item.mimeType};base64,${item.data}`,
191
+ };
192
+ }
193
+ });
194
+ input.push({
195
+ role: "user",
196
+ content,
197
+ });
198
+ }
199
+ }
200
+ else if (msg.role === "assistant") {
201
+ // Assistant messages - add both content and tool calls to output
202
+ const output = [];
203
+ if (msg.thinkingSignature) {
204
+ output.push(...JSON.parse(msg.thinkingSignature));
205
+ }
206
+ if (msg.toolCalls) {
207
+ for (const toolCall of msg.toolCalls) {
208
+ output.push({
209
+ type: "function_call",
210
+ id: toolCall.id.split("|")[1], // Extract original ID
211
+ call_id: toolCall.id.split("|")[0], // Extract call session ID
212
+ name: toolCall.name,
213
+ arguments: JSON.stringify(toolCall.arguments),
214
+ });
215
+ }
216
+ }
217
+ if (msg.content) {
218
+ output.push({
219
+ type: "message",
220
+ role: "assistant",
221
+ content: [{ type: "input_text", text: msg.content }],
222
+ });
223
+ }
224
+ // Add all output items to input
225
+ input.push(...output);
226
+ }
227
+ else if (msg.role === "toolResult") {
228
+ // Tool results are sent as function_call_output
229
+ input.push({
230
+ type: "function_call_output",
231
+ call_id: msg.toolCallId.split("|")[0], // Extract call session ID
232
+ output: msg.content,
233
+ });
234
+ }
235
+ }
236
+ return input;
237
+ }
238
+ convertTools(tools) {
239
+ return tools.map((tool) => ({
240
+ type: "function",
241
+ name: tool.name,
242
+ description: tool.description,
243
+ parameters: tool.parameters,
244
+ strict: null,
245
+ }));
246
+ }
247
+ mapStopReason(status) {
248
+ switch (status) {
249
+ case "completed":
250
+ return "stop";
251
+ case "incomplete":
252
+ return "length";
253
+ case "failed":
254
+ case "cancelled":
255
+ return "error";
256
+ default:
257
+ return "stop";
258
+ }
259
+ }
260
+ }
261
+ //# sourceMappingURL=openai-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"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"}