@ank1015/providers 0.0.37 → 0.0.39
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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +19 -1
- package/dist/llm.js.map +1 -1
- package/dist/models.generated.d.ts +89 -0
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +94 -5
- package/dist/models.generated.js.map +1 -1
- package/dist/providers/cerebras/complete.d.ts +3 -0
- package/dist/providers/cerebras/complete.d.ts.map +1 -0
- package/dist/providers/cerebras/complete.js +58 -0
- package/dist/providers/cerebras/complete.js.map +1 -0
- package/dist/providers/cerebras/index.d.ts +5 -0
- package/dist/providers/cerebras/index.d.ts.map +1 -0
- package/dist/providers/cerebras/index.js +4 -0
- package/dist/providers/cerebras/index.js.map +1 -0
- package/dist/providers/cerebras/stream.d.ts +3 -0
- package/dist/providers/cerebras/stream.d.ts.map +1 -0
- package/dist/providers/cerebras/stream.js +321 -0
- package/dist/providers/cerebras/stream.js.map +1 -0
- package/dist/providers/cerebras/types.d.ts +14 -0
- package/dist/providers/cerebras/types.d.ts.map +1 -0
- package/dist/providers/cerebras/types.js +2 -0
- package/dist/providers/cerebras/types.js.map +1 -0
- package/dist/providers/cerebras/utils.d.ts +19 -0
- package/dist/providers/cerebras/utils.d.ts.map +1 -0
- package/dist/providers/cerebras/utils.js +274 -0
- package/dist/providers/cerebras/utils.js.map +1 -0
- package/dist/providers/kimi/complete.d.ts +3 -0
- package/dist/providers/kimi/complete.d.ts.map +1 -0
- package/dist/providers/kimi/complete.js +58 -0
- package/dist/providers/kimi/complete.js.map +1 -0
- package/dist/providers/kimi/index.d.ts +5 -0
- package/dist/providers/kimi/index.d.ts.map +1 -0
- package/dist/providers/kimi/index.js +4 -0
- package/dist/providers/kimi/index.js.map +1 -0
- package/dist/providers/kimi/stream.d.ts +3 -0
- package/dist/providers/kimi/stream.d.ts.map +1 -0
- package/dist/providers/kimi/stream.js +323 -0
- package/dist/providers/kimi/stream.js.map +1 -0
- package/dist/providers/kimi/types.d.ts +12 -0
- package/dist/providers/kimi/types.d.ts.map +1 -0
- package/dist/providers/kimi/types.js +2 -0
- package/dist/providers/kimi/types.js.map +1 -0
- package/dist/providers/kimi/utils.d.ts +18 -0
- package/dist/providers/kimi/utils.d.ts.map +1 -0
- package/dist/providers/kimi/utils.js +302 -0
- package/dist/providers/kimi/utils.js.map +1 -0
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { createClient, buildParams, mapStopReason, getMockCerebrasMessage } from "./utils.js";
|
|
2
|
+
import { AssistantMessageEventStream } from "../../utils/event-stream.js";
|
|
3
|
+
import { parseStreamingJson } from "../../utils/json-parse.js";
|
|
4
|
+
import { validateToolArguments } from "../../utils/validation.js";
|
|
5
|
+
import { calculateCost } from "../../models.js";
|
|
6
|
+
export const streamCerebras = (model, context, options, id) => {
|
|
7
|
+
const stream = new AssistantMessageEventStream();
|
|
8
|
+
(async () => {
|
|
9
|
+
const startTimestamp = Date.now();
|
|
10
|
+
const output = {
|
|
11
|
+
role: "assistant",
|
|
12
|
+
api: model.api,
|
|
13
|
+
model: model,
|
|
14
|
+
id,
|
|
15
|
+
content: [],
|
|
16
|
+
usage: {
|
|
17
|
+
input: 0,
|
|
18
|
+
output: 0,
|
|
19
|
+
cacheRead: 0,
|
|
20
|
+
cacheWrite: 0,
|
|
21
|
+
totalTokens: 0,
|
|
22
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
23
|
+
},
|
|
24
|
+
stopReason: "stop",
|
|
25
|
+
timestamp: startTimestamp,
|
|
26
|
+
duration: 0
|
|
27
|
+
};
|
|
28
|
+
// Build final ChatCompletion from streamed chunks
|
|
29
|
+
let finalResponse = getMockCerebrasMessage();
|
|
30
|
+
let accumulatedContent = '';
|
|
31
|
+
let accumulatedReasoning = '';
|
|
32
|
+
const accumulatedToolCalls = new Map();
|
|
33
|
+
try {
|
|
34
|
+
const client = createClient(model, options?.apiKey);
|
|
35
|
+
const params = buildParams(model, context, options);
|
|
36
|
+
const cerebrasStream = await client.chat.completions.create({ ...params, stream: true }, { signal: options?.signal });
|
|
37
|
+
stream.push({ type: "start", message: { ...output, timestamp: Date.now() } });
|
|
38
|
+
let currentBlock = null;
|
|
39
|
+
const blocks = output.content;
|
|
40
|
+
const blockIndex = () => blocks.length - 1;
|
|
41
|
+
// Track tool call states for streaming
|
|
42
|
+
const toolCallBlocks = new Map();
|
|
43
|
+
for await (const chunk of cerebrasStream) {
|
|
44
|
+
const choice = chunk.choices[0];
|
|
45
|
+
if (!choice)
|
|
46
|
+
continue;
|
|
47
|
+
const delta = choice.delta;
|
|
48
|
+
// Handle reasoning content (Cerebras uses 'reasoning' field when reasoning_format=parsed)
|
|
49
|
+
if (delta.reasoning) {
|
|
50
|
+
accumulatedReasoning += delta.reasoning;
|
|
51
|
+
// Start thinking block if needed
|
|
52
|
+
if (!currentBlock || currentBlock.type !== 'thinking') {
|
|
53
|
+
// End previous block if exists
|
|
54
|
+
if (currentBlock) {
|
|
55
|
+
if (currentBlock.type === 'response') {
|
|
56
|
+
stream.push({
|
|
57
|
+
type: "text_end",
|
|
58
|
+
contentIndex: blockIndex(),
|
|
59
|
+
content: currentBlock.content,
|
|
60
|
+
message: { ...output, timestamp: Date.now() },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
currentBlock = { type: 'thinking', thinkingText: '' };
|
|
65
|
+
output.content.push(currentBlock);
|
|
66
|
+
stream.push({ type: "thinking_start", contentIndex: blockIndex(), message: { ...output, timestamp: Date.now() } });
|
|
67
|
+
}
|
|
68
|
+
if (currentBlock.type === 'thinking') {
|
|
69
|
+
currentBlock.thinkingText += delta.reasoning;
|
|
70
|
+
stream.push({
|
|
71
|
+
type: "thinking_delta",
|
|
72
|
+
contentIndex: blockIndex(),
|
|
73
|
+
delta: delta.reasoning,
|
|
74
|
+
message: { ...output, timestamp: Date.now() },
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Handle text content
|
|
79
|
+
if (delta.content) {
|
|
80
|
+
accumulatedContent += delta.content;
|
|
81
|
+
// Transition from thinking to response if needed
|
|
82
|
+
if (!currentBlock || currentBlock.type === 'thinking') {
|
|
83
|
+
// End thinking block if exists
|
|
84
|
+
if (currentBlock && currentBlock.type === 'thinking') {
|
|
85
|
+
stream.push({
|
|
86
|
+
type: "thinking_end",
|
|
87
|
+
contentIndex: blockIndex(),
|
|
88
|
+
content: currentBlock.thinkingText,
|
|
89
|
+
message: { ...output, timestamp: Date.now() },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
currentBlock = { type: 'response', content: [{ type: 'text', content: '' }] };
|
|
93
|
+
output.content.push(currentBlock);
|
|
94
|
+
stream.push({ type: "text_start", contentIndex: blockIndex(), message: { ...output, timestamp: Date.now() } });
|
|
95
|
+
}
|
|
96
|
+
if (currentBlock.type === 'response') {
|
|
97
|
+
const index = currentBlock.content.findIndex((c) => c.type === 'text');
|
|
98
|
+
if (index !== -1) {
|
|
99
|
+
currentBlock.content[index].content += delta.content;
|
|
100
|
+
}
|
|
101
|
+
stream.push({
|
|
102
|
+
type: "text_delta",
|
|
103
|
+
contentIndex: blockIndex(),
|
|
104
|
+
delta: delta.content,
|
|
105
|
+
message: { ...output, timestamp: Date.now() },
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Handle tool calls
|
|
110
|
+
if (delta.tool_calls) {
|
|
111
|
+
// End current text/thinking block if we're starting tool calls
|
|
112
|
+
if (currentBlock && currentBlock.type !== 'toolCall') {
|
|
113
|
+
if (currentBlock.type === 'response') {
|
|
114
|
+
stream.push({
|
|
115
|
+
type: "text_end",
|
|
116
|
+
contentIndex: blockIndex(),
|
|
117
|
+
content: currentBlock.content,
|
|
118
|
+
message: { ...output, timestamp: Date.now() },
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
else if (currentBlock.type === 'thinking') {
|
|
122
|
+
stream.push({
|
|
123
|
+
type: "thinking_end",
|
|
124
|
+
contentIndex: blockIndex(),
|
|
125
|
+
content: currentBlock.thinkingText,
|
|
126
|
+
message: { ...output, timestamp: Date.now() },
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
currentBlock = null;
|
|
130
|
+
}
|
|
131
|
+
for (const toolCallDelta of delta.tool_calls) {
|
|
132
|
+
const toolIndex = toolCallDelta.index;
|
|
133
|
+
// Get or create accumulated tool call
|
|
134
|
+
if (!accumulatedToolCalls.has(toolIndex)) {
|
|
135
|
+
accumulatedToolCalls.set(toolIndex, {
|
|
136
|
+
id: toolCallDelta.id || '',
|
|
137
|
+
type: 'function',
|
|
138
|
+
function: { name: '', arguments: '' }
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const accumulated = accumulatedToolCalls.get(toolIndex);
|
|
142
|
+
// Update accumulated data
|
|
143
|
+
if (toolCallDelta.id) {
|
|
144
|
+
accumulated.id = toolCallDelta.id;
|
|
145
|
+
}
|
|
146
|
+
if (toolCallDelta.function?.name) {
|
|
147
|
+
accumulated.function.name += toolCallDelta.function.name;
|
|
148
|
+
}
|
|
149
|
+
if (toolCallDelta.function?.arguments) {
|
|
150
|
+
accumulated.function.arguments += toolCallDelta.function.arguments;
|
|
151
|
+
}
|
|
152
|
+
// Get or create tool call block
|
|
153
|
+
if (!toolCallBlocks.has(toolIndex)) {
|
|
154
|
+
const toolBlock = {
|
|
155
|
+
type: 'toolCall',
|
|
156
|
+
toolCallId: accumulated.id,
|
|
157
|
+
name: accumulated.function.name,
|
|
158
|
+
arguments: {},
|
|
159
|
+
partialJson: ''
|
|
160
|
+
};
|
|
161
|
+
toolCallBlocks.set(toolIndex, toolBlock);
|
|
162
|
+
output.content.push(toolBlock);
|
|
163
|
+
currentBlock = toolBlock;
|
|
164
|
+
stream.push({ type: "toolcall_start", contentIndex: blockIndex(), message: { ...output, timestamp: Date.now() } });
|
|
165
|
+
}
|
|
166
|
+
const toolBlock = toolCallBlocks.get(toolIndex);
|
|
167
|
+
// Update tool block with new data
|
|
168
|
+
if (toolCallDelta.id) {
|
|
169
|
+
toolBlock.toolCallId = accumulated.id;
|
|
170
|
+
}
|
|
171
|
+
if (toolCallDelta.function?.name) {
|
|
172
|
+
toolBlock.name = accumulated.function.name;
|
|
173
|
+
}
|
|
174
|
+
if (toolCallDelta.function?.arguments) {
|
|
175
|
+
toolBlock.partialJson += toolCallDelta.function.arguments;
|
|
176
|
+
toolBlock.arguments = parseStreamingJson(toolBlock.partialJson);
|
|
177
|
+
stream.push({
|
|
178
|
+
type: "toolcall_delta",
|
|
179
|
+
contentIndex: blocks.indexOf(toolBlock),
|
|
180
|
+
delta: toolCallDelta.function.arguments,
|
|
181
|
+
message: { ...output, timestamp: Date.now() },
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Handle finish reason
|
|
187
|
+
if (choice.finish_reason) {
|
|
188
|
+
output.stopReason = mapStopReason(choice.finish_reason);
|
|
189
|
+
}
|
|
190
|
+
// Handle usage (typically in the last chunk)
|
|
191
|
+
if (chunk.usage) {
|
|
192
|
+
const usage = chunk.usage;
|
|
193
|
+
const cacheHitTokens = usage.prompt_tokens_details?.cached_tokens || 0;
|
|
194
|
+
output.usage = {
|
|
195
|
+
input: (usage.prompt_tokens || 0) - cacheHitTokens,
|
|
196
|
+
output: usage.completion_tokens || 0,
|
|
197
|
+
cacheRead: cacheHitTokens,
|
|
198
|
+
cacheWrite: 0,
|
|
199
|
+
totalTokens: usage.total_tokens || 0,
|
|
200
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
201
|
+
};
|
|
202
|
+
calculateCost(model, output.usage);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// End any remaining blocks
|
|
206
|
+
if (currentBlock) {
|
|
207
|
+
if (currentBlock.type === 'response') {
|
|
208
|
+
stream.push({
|
|
209
|
+
type: "text_end",
|
|
210
|
+
contentIndex: blockIndex(),
|
|
211
|
+
content: currentBlock.content,
|
|
212
|
+
message: { ...output, timestamp: Date.now() },
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
else if (currentBlock.type === 'thinking') {
|
|
216
|
+
stream.push({
|
|
217
|
+
type: "thinking_end",
|
|
218
|
+
contentIndex: blockIndex(),
|
|
219
|
+
content: currentBlock.thinkingText,
|
|
220
|
+
message: { ...output, timestamp: Date.now() },
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// End tool call blocks and validate arguments
|
|
225
|
+
for (const [, toolBlock] of toolCallBlocks) {
|
|
226
|
+
// Parse final JSON
|
|
227
|
+
try {
|
|
228
|
+
toolBlock.arguments = JSON.parse(toolBlock.partialJson || '{}');
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
// Keep the parsed streaming result
|
|
232
|
+
}
|
|
233
|
+
// Validate tool arguments if tool definition is available
|
|
234
|
+
if (context.tools) {
|
|
235
|
+
const tool = context.tools.find((t) => t.name === toolBlock.name);
|
|
236
|
+
if (tool) {
|
|
237
|
+
toolBlock.arguments = validateToolArguments(tool, toolBlock);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Clean up partialJson before sending final event
|
|
241
|
+
const { partialJson: _, ...cleanToolCall } = toolBlock;
|
|
242
|
+
stream.push({
|
|
243
|
+
type: "toolcall_end",
|
|
244
|
+
contentIndex: blocks.indexOf(toolBlock),
|
|
245
|
+
toolCall: cleanToolCall,
|
|
246
|
+
message: { ...output, timestamp: Date.now() }
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
// Clean up partialJson from output content
|
|
250
|
+
for (const block of output.content) {
|
|
251
|
+
if ('partialJson' in block) {
|
|
252
|
+
delete block.partialJson;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Ensure stopReason is toolUse if we have tool calls
|
|
256
|
+
if (output.content.some((b) => b.type === 'toolCall') && output.stopReason === 'stop') {
|
|
257
|
+
output.stopReason = 'toolUse';
|
|
258
|
+
}
|
|
259
|
+
if (options?.signal?.aborted) {
|
|
260
|
+
throw new Error("Request was aborted");
|
|
261
|
+
}
|
|
262
|
+
if (output.stopReason === "aborted" || output.stopReason === "error") {
|
|
263
|
+
throw new Error(`Stream ended with status: ${output.stopReason}${output.errorMessage ? ` - ${output.errorMessage}` : ""}`);
|
|
264
|
+
}
|
|
265
|
+
// Build final ChatCompletion response
|
|
266
|
+
finalResponse = {
|
|
267
|
+
id: `chatcmpl-${id}`,
|
|
268
|
+
object: "chat.completion",
|
|
269
|
+
created: Math.floor(startTimestamp / 1000),
|
|
270
|
+
model: model.id,
|
|
271
|
+
choices: [{
|
|
272
|
+
index: 0,
|
|
273
|
+
message: {
|
|
274
|
+
role: "assistant",
|
|
275
|
+
content: accumulatedContent || null,
|
|
276
|
+
refusal: null,
|
|
277
|
+
...(accumulatedToolCalls.size > 0 && {
|
|
278
|
+
tool_calls: Array.from(accumulatedToolCalls.values())
|
|
279
|
+
})
|
|
280
|
+
},
|
|
281
|
+
finish_reason: output.stopReason === 'toolUse' ? 'tool_calls' : 'stop',
|
|
282
|
+
logprobs: null
|
|
283
|
+
}],
|
|
284
|
+
usage: {
|
|
285
|
+
prompt_tokens: output.usage.input + output.usage.cacheRead,
|
|
286
|
+
completion_tokens: output.usage.output,
|
|
287
|
+
total_tokens: output.usage.totalTokens
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
// Add reasoning to the message if present
|
|
291
|
+
if (accumulatedReasoning) {
|
|
292
|
+
finalResponse.choices[0].message.reasoning = accumulatedReasoning;
|
|
293
|
+
}
|
|
294
|
+
stream.push({ type: "done", reason: output.stopReason, message: { ...output, timestamp: Date.now() } });
|
|
295
|
+
const baseAssistantMessage = {
|
|
296
|
+
...output,
|
|
297
|
+
message: finalResponse,
|
|
298
|
+
timestamp: Date.now(),
|
|
299
|
+
duration: Date.now() - startTimestamp
|
|
300
|
+
};
|
|
301
|
+
stream.end(baseAssistantMessage);
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
for (const block of output.content) {
|
|
305
|
+
delete block.partialJson;
|
|
306
|
+
}
|
|
307
|
+
output.stopReason = options?.signal?.aborted ? "aborted" : "error";
|
|
308
|
+
output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
|
|
309
|
+
stream.push({ type: "error", reason: output.stopReason, message: { ...output, timestamp: Date.now() } });
|
|
310
|
+
const baseAssistantMessage = {
|
|
311
|
+
...output,
|
|
312
|
+
message: finalResponse,
|
|
313
|
+
timestamp: Date.now(),
|
|
314
|
+
duration: Date.now() - startTimestamp
|
|
315
|
+
};
|
|
316
|
+
stream.end(baseAssistantMessage);
|
|
317
|
+
}
|
|
318
|
+
})();
|
|
319
|
+
return stream;
|
|
320
|
+
};
|
|
321
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/providers/cerebras/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ChatCompletionCreateParamsBase } from "openai/resources/chat/completions.js";
|
|
2
|
+
export type CerebrasReasoningFormat = "parsed" | "raw" | "hidden" | "none";
|
|
3
|
+
export type CerebrasReasoningEffort = "low" | "medium" | "high";
|
|
4
|
+
type Props = {
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
reasoning_format?: CerebrasReasoningFormat;
|
|
8
|
+
reasoning_effort?: CerebrasReasoningEffort;
|
|
9
|
+
disable_reasoning?: boolean;
|
|
10
|
+
clear_thinking?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type CerebrasProviderOptions = Omit<ChatCompletionCreateParamsBase, 'model' | 'messages'> & Props;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/cerebras/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAA;AAE1F,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC3E,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhE,KAAK,KAAK,GAAG;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAE3C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAE3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,8BAA8B,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG,KAAK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/providers/cerebras/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { AssistantResponse, Context, Model, StopReason, Tool, Usage } from "../../types.js";
|
|
3
|
+
import type { ChatCompletion, ChatCompletionMessageParam, ChatCompletionTool, ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions.js";
|
|
4
|
+
import { CerebrasProviderOptions } from "./types.js";
|
|
5
|
+
export declare function createClient(model: Model<"cerebras">, apiKey?: string): OpenAI;
|
|
6
|
+
export declare function getResponseAssistantResponse(response: ChatCompletion): AssistantResponse;
|
|
7
|
+
export declare function getAssistantStopReason(response: ChatCompletion): StopReason;
|
|
8
|
+
export declare function getResponseUsage(response: ChatCompletion, model: Model<'cerebras'>): Usage;
|
|
9
|
+
export declare function buildParams(model: Model<"cerebras">, context: Context, options: CerebrasProviderOptions): ChatCompletionCreateParamsNonStreaming & {
|
|
10
|
+
reasoning_format?: string;
|
|
11
|
+
reasoning_effort?: string;
|
|
12
|
+
disable_reasoning?: boolean;
|
|
13
|
+
clear_thinking?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export declare function buildCerebrasMessages(_model: Model<'cerebras'>, context: Context): ChatCompletionMessageParam[];
|
|
16
|
+
export declare function convertTools(tools: readonly Tool[]): ChatCompletionTool[];
|
|
17
|
+
export declare function mapStopReason(finishReason: string | null | undefined): StopReason;
|
|
18
|
+
export declare function getMockCerebrasMessage(): ChatCompletion;
|
|
19
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/providers/cerebras/utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAwB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAe,MAAM,gBAAgB,CAAC;AAC/H,OAAO,KAAK,EACX,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,sCAAsC,EAGtC,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAarD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,UAkBrE;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,cAAc,GAAG,iBAAiB,CA4CxF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAG3E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAgB1F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB;uBAcnF,MAAM;uBACN,MAAM;wBACL,OAAO;qBACV,OAAO;EAkDzB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,0BAA0B,EAAE,CAmG/G;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAmBzE;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAejF;AAED,wBAAgB,sBAAsB,IAAI,cAAc,CAsBvD"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { sanitizeSurrogates } from "../../utils/sanitize-unicode.js";
|
|
3
|
+
import { calculateCost } from "../../models.js";
|
|
4
|
+
export function createClient(model, apiKey) {
|
|
5
|
+
if (!apiKey) {
|
|
6
|
+
if (!process.env.CEREBRAS_API_KEY) {
|
|
7
|
+
throw new Error("Cerebras API key is required. Set CEREBRAS_API_KEY environment variable or pass it as an argument.");
|
|
8
|
+
}
|
|
9
|
+
apiKey = process.env.CEREBRAS_API_KEY;
|
|
10
|
+
}
|
|
11
|
+
return new OpenAI({
|
|
12
|
+
apiKey,
|
|
13
|
+
baseURL: model.baseUrl,
|
|
14
|
+
dangerouslyAllowBrowser: true,
|
|
15
|
+
defaultHeaders: {
|
|
16
|
+
"User-Agent": "cerebras-providers-sdk",
|
|
17
|
+
...model.headers,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export function getResponseAssistantResponse(response) {
|
|
22
|
+
const assistantResponse = [];
|
|
23
|
+
const choice = response.choices[0];
|
|
24
|
+
if (!choice?.message) {
|
|
25
|
+
return assistantResponse;
|
|
26
|
+
}
|
|
27
|
+
const message = choice.message;
|
|
28
|
+
// Handle reasoning content (Cerebras uses 'reasoning' field when reasoning_format=parsed)
|
|
29
|
+
if (message.reasoning) {
|
|
30
|
+
assistantResponse.push({
|
|
31
|
+
type: 'thinking',
|
|
32
|
+
thinkingText: message.reasoning
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Handle text content
|
|
36
|
+
if (message.content) {
|
|
37
|
+
assistantResponse.push({
|
|
38
|
+
type: 'response',
|
|
39
|
+
content: [{
|
|
40
|
+
type: 'text',
|
|
41
|
+
content: message.content
|
|
42
|
+
}]
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Handle tool calls
|
|
46
|
+
if (message.tool_calls) {
|
|
47
|
+
for (const toolCall of message.tool_calls) {
|
|
48
|
+
if (toolCall.type === 'function') {
|
|
49
|
+
assistantResponse.push({
|
|
50
|
+
type: 'toolCall',
|
|
51
|
+
toolCallId: toolCall.id,
|
|
52
|
+
name: toolCall.function.name,
|
|
53
|
+
arguments: JSON.parse(toolCall.function.arguments || '{}')
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return assistantResponse;
|
|
59
|
+
}
|
|
60
|
+
export function getAssistantStopReason(response) {
|
|
61
|
+
const finishReason = response.choices[0]?.finish_reason;
|
|
62
|
+
return mapStopReason(finishReason);
|
|
63
|
+
}
|
|
64
|
+
export function getResponseUsage(response, model) {
|
|
65
|
+
const responseUsage = response.usage;
|
|
66
|
+
// Cerebras reports cache hits via prompt_tokens_details.cached_tokens
|
|
67
|
+
const cacheHitTokens = responseUsage?.prompt_tokens_details?.cached_tokens || 0;
|
|
68
|
+
const usage = {
|
|
69
|
+
input: (responseUsage?.prompt_tokens || 0) - cacheHitTokens,
|
|
70
|
+
output: responseUsage?.completion_tokens || 0,
|
|
71
|
+
cacheRead: cacheHitTokens,
|
|
72
|
+
cacheWrite: 0,
|
|
73
|
+
totalTokens: responseUsage?.total_tokens || 0,
|
|
74
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
|
|
75
|
+
};
|
|
76
|
+
calculateCost(model, usage);
|
|
77
|
+
return usage;
|
|
78
|
+
}
|
|
79
|
+
export function buildParams(model, context, options) {
|
|
80
|
+
const messages = buildCerebrasMessages(model, context);
|
|
81
|
+
const { apiKey, signal, reasoning_format, reasoning_effort, disable_reasoning, clear_thinking, ...cerebrasOptions } = options;
|
|
82
|
+
const params = {
|
|
83
|
+
...cerebrasOptions,
|
|
84
|
+
model: model.id,
|
|
85
|
+
messages,
|
|
86
|
+
stream: false
|
|
87
|
+
};
|
|
88
|
+
// Add reasoning format - default to 'parsed' to get structured reasoning
|
|
89
|
+
if (reasoning_format) {
|
|
90
|
+
params.reasoning_format = reasoning_format;
|
|
91
|
+
}
|
|
92
|
+
else if (model.reasoning) {
|
|
93
|
+
// Default to parsed for reasoning models
|
|
94
|
+
params.reasoning_format = 'parsed';
|
|
95
|
+
}
|
|
96
|
+
// Model-specific reasoning parameters
|
|
97
|
+
if (reasoning_effort !== undefined) {
|
|
98
|
+
// GPT-OSS specific
|
|
99
|
+
params.reasoning_effort = reasoning_effort;
|
|
100
|
+
}
|
|
101
|
+
if (disable_reasoning !== undefined) {
|
|
102
|
+
// GLM specific
|
|
103
|
+
params.disable_reasoning = disable_reasoning;
|
|
104
|
+
}
|
|
105
|
+
if (clear_thinking !== undefined) {
|
|
106
|
+
// GLM specific
|
|
107
|
+
params.clear_thinking = clear_thinking;
|
|
108
|
+
}
|
|
109
|
+
// Add tools if available and supported
|
|
110
|
+
if (context.tools && context.tools.length > 0 && model.tools.includes('function_calling')) {
|
|
111
|
+
const tools = [];
|
|
112
|
+
const convertedTools = convertTools(context.tools);
|
|
113
|
+
for (const convertedTool of convertedTools) {
|
|
114
|
+
tools.push(convertedTool);
|
|
115
|
+
}
|
|
116
|
+
if (cerebrasOptions.tools) {
|
|
117
|
+
for (const optionTool of cerebrasOptions.tools) {
|
|
118
|
+
tools.push(optionTool);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
params.tools = tools;
|
|
122
|
+
}
|
|
123
|
+
return params;
|
|
124
|
+
}
|
|
125
|
+
export function buildCerebrasMessages(_model, context) {
|
|
126
|
+
const messages = [];
|
|
127
|
+
// Add system prompt
|
|
128
|
+
if (context.systemPrompt) {
|
|
129
|
+
messages.push({
|
|
130
|
+
role: 'system',
|
|
131
|
+
content: sanitizeSurrogates(context.systemPrompt)
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
for (const message of context.messages) {
|
|
135
|
+
// Handle user messages
|
|
136
|
+
if (message.role === 'user') {
|
|
137
|
+
// Cerebras chat completions API supports text content
|
|
138
|
+
const textContents = message.content
|
|
139
|
+
.filter(c => c.type === 'text')
|
|
140
|
+
.map(c => sanitizeSurrogates(c.content))
|
|
141
|
+
.join('\n');
|
|
142
|
+
if (textContents) {
|
|
143
|
+
messages.push({
|
|
144
|
+
role: 'user',
|
|
145
|
+
content: textContents
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Handle tool results
|
|
150
|
+
if (message.role === 'toolResult') {
|
|
151
|
+
const textContent = message.content
|
|
152
|
+
.filter(c => c.type === 'text')
|
|
153
|
+
.map(c => {
|
|
154
|
+
const text = c.content;
|
|
155
|
+
return message.isError ? `[TOOL ERROR] ${text}` : text;
|
|
156
|
+
})
|
|
157
|
+
.join('\n');
|
|
158
|
+
const toolMessage = {
|
|
159
|
+
role: 'tool',
|
|
160
|
+
tool_call_id: message.toolCallId,
|
|
161
|
+
content: sanitizeSurrogates(textContent || (message.isError ? '[TOOL ERROR]' : ''))
|
|
162
|
+
};
|
|
163
|
+
messages.push(toolMessage);
|
|
164
|
+
}
|
|
165
|
+
// Handle assistant messages
|
|
166
|
+
if (message.role === 'assistant') {
|
|
167
|
+
if (message.model.api === 'cerebras') {
|
|
168
|
+
// Native Cerebras message - reconstruct from original
|
|
169
|
+
const baseMessage = message;
|
|
170
|
+
const originalMessage = baseMessage.message.choices[0]?.message;
|
|
171
|
+
if (originalMessage) {
|
|
172
|
+
const assistantMessage = originalMessage;
|
|
173
|
+
messages.push(assistantMessage);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// Convert from other providers using normalized content
|
|
178
|
+
let textContent = '';
|
|
179
|
+
const toolCalls = [];
|
|
180
|
+
for (const contentBlock of message.content) {
|
|
181
|
+
if (contentBlock.type === 'thinking') {
|
|
182
|
+
// For Cerebras, we include thinking in <think> tags for GLM/Qwen compatibility
|
|
183
|
+
textContent = `<think>${sanitizeSurrogates(contentBlock.thinkingText)}</think>` + textContent;
|
|
184
|
+
}
|
|
185
|
+
else if (contentBlock.type === 'response') {
|
|
186
|
+
const text = contentBlock.content
|
|
187
|
+
.filter(c => c.type === 'text')
|
|
188
|
+
.map(c => sanitizeSurrogates(c.content))
|
|
189
|
+
.join('');
|
|
190
|
+
textContent += text;
|
|
191
|
+
}
|
|
192
|
+
else if (contentBlock.type === 'toolCall') {
|
|
193
|
+
toolCalls.push({
|
|
194
|
+
id: contentBlock.toolCallId,
|
|
195
|
+
type: 'function',
|
|
196
|
+
function: {
|
|
197
|
+
name: contentBlock.name,
|
|
198
|
+
arguments: JSON.stringify(contentBlock.arguments)
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const assistantMessage = {
|
|
204
|
+
role: 'assistant',
|
|
205
|
+
content: textContent || null
|
|
206
|
+
};
|
|
207
|
+
if (toolCalls.length > 0) {
|
|
208
|
+
assistantMessage.tool_calls = toolCalls;
|
|
209
|
+
}
|
|
210
|
+
messages.push(assistantMessage);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return messages;
|
|
215
|
+
}
|
|
216
|
+
export function convertTools(tools) {
|
|
217
|
+
return tools.map((tool) => {
|
|
218
|
+
const params = tool.parameters;
|
|
219
|
+
// Add additionalProperties: false for Cerebras strict mode compatibility
|
|
220
|
+
const parameters = {
|
|
221
|
+
...params,
|
|
222
|
+
additionalProperties: false
|
|
223
|
+
};
|
|
224
|
+
return {
|
|
225
|
+
type: "function",
|
|
226
|
+
function: {
|
|
227
|
+
name: tool.name,
|
|
228
|
+
description: tool.description,
|
|
229
|
+
parameters,
|
|
230
|
+
strict: true
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
export function mapStopReason(finishReason) {
|
|
236
|
+
if (!finishReason)
|
|
237
|
+
return "stop";
|
|
238
|
+
switch (finishReason) {
|
|
239
|
+
case "stop":
|
|
240
|
+
return "stop";
|
|
241
|
+
case "length":
|
|
242
|
+
return "length";
|
|
243
|
+
case "tool_calls":
|
|
244
|
+
return "toolUse";
|
|
245
|
+
case "content_filter":
|
|
246
|
+
return "error";
|
|
247
|
+
default:
|
|
248
|
+
return "stop";
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
export function getMockCerebrasMessage() {
|
|
252
|
+
return {
|
|
253
|
+
id: "chatcmpl-123",
|
|
254
|
+
object: "chat.completion",
|
|
255
|
+
created: Math.floor(Date.now() / 1000),
|
|
256
|
+
model: "zai-glm-4.7",
|
|
257
|
+
choices: [{
|
|
258
|
+
index: 0,
|
|
259
|
+
message: {
|
|
260
|
+
role: "assistant",
|
|
261
|
+
content: "",
|
|
262
|
+
refusal: null
|
|
263
|
+
},
|
|
264
|
+
finish_reason: "stop",
|
|
265
|
+
logprobs: null
|
|
266
|
+
}],
|
|
267
|
+
usage: {
|
|
268
|
+
prompt_tokens: 0,
|
|
269
|
+
completion_tokens: 0,
|
|
270
|
+
total_tokens: 0
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=utils.js.map
|