@standardagents/cerebras 0.21.1 → 0.22.1
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 +62 -0
- package/dist/chunk-NSNGOKA3.js +11 -0
- package/dist/chunk-NSNGOKA3.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +99 -17
- package/dist/index.js.map +1 -1
- package/dist/pricing.d.ts +1 -0
- package/dist/pricing.js +9 -0
- package/dist/pricing.js.map +1 -0
- package/package.json +9 -4
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# @standardagents/cerebras
|
|
2
|
+
|
|
3
|
+
Cerebras provider for Standard Agents.
|
|
4
|
+
|
|
5
|
+
This package wraps Cerebras' OpenAI-compatible Chat Completions API behind the
|
|
6
|
+
Standard Agents provider interface. It supports:
|
|
7
|
+
|
|
8
|
+
- streaming and non-streaming text generation
|
|
9
|
+
- local function tool calling on supported models
|
|
10
|
+
- JSON and structured output modes
|
|
11
|
+
- Cerebras reasoning controls
|
|
12
|
+
- usage normalization and provider-owned cost calculation for documented models
|
|
13
|
+
|
|
14
|
+
## Install
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @standardagents/cerebras @standardagents/spec
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { cerebras } from '@standardagents/cerebras';
|
|
24
|
+
|
|
25
|
+
const provider = cerebras({
|
|
26
|
+
apiKey: process.env.CEREBRAS_API_KEY!,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const result = await provider.generate({
|
|
30
|
+
model: 'zai-glm-4.7',
|
|
31
|
+
messages: [{ role: 'user', content: 'Give me three concise launch names.' }],
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
console.log(result.content);
|
|
35
|
+
console.log(result.usage?.cost);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Factory
|
|
39
|
+
|
|
40
|
+
The package exports:
|
|
41
|
+
|
|
42
|
+
- `cerebras(config)` - provider factory
|
|
43
|
+
- `CerebrasProvider` - provider class
|
|
44
|
+
- `cerebrasProviderOptions` - Zod schema for provider-specific options
|
|
45
|
+
|
|
46
|
+
## Pricing Helpers
|
|
47
|
+
|
|
48
|
+
Known Cerebras model pricing is available through both the package root and the
|
|
49
|
+
pure `@standardagents/cerebras/pricing` subpath:
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import { calculateCerebrasUsageCost } from '@standardagents/cerebras/pricing';
|
|
53
|
+
|
|
54
|
+
const cost = calculateCerebrasUsageCost('zai-glm-4.7', {
|
|
55
|
+
promptTokens: 6298,
|
|
56
|
+
completionTokens: 284,
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
For known models, generated and streamed responses attach the same value to
|
|
61
|
+
`usage.cost`. Custom or private Cerebras models should still define explicit
|
|
62
|
+
model pricing in AgentBuilder because unknown provider prices are not guessed.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pricing.ts"],"sourcesContent":["export {\n calculateCerebrasUsageCost,\n getCerebrasModelPricing,\n type CerebrasModelPricing,\n} from '@standardagents/provider-pricing';\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LLMProviderInterface, ProviderFactoryConfig, ModelCapabilities, ProviderModelInfo, ProviderRequest, ProviderResponse, ProviderStreamChunk, InspectedRequest, ProviderFactoryWithOptions } from '@standardagents/spec';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
export { CerebrasModelPricing, calculateCerebrasUsageCost, getCerebrasModelPricing } from '@standardagents/provider-pricing';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Cerebras provider options schema.
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
calculateCerebrasUsageCost,
|
|
3
|
+
getCerebrasModelPricing
|
|
4
|
+
} from "./chunk-NSNGOKA3.js";
|
|
5
|
+
|
|
1
6
|
// src/CerebrasProvider.ts
|
|
2
7
|
import { ProviderError } from "@standardagents/spec";
|
|
3
8
|
|
|
@@ -146,23 +151,92 @@ function transformChatMessages(messages) {
|
|
|
146
151
|
}
|
|
147
152
|
return result;
|
|
148
153
|
}
|
|
154
|
+
function isRecord(value) {
|
|
155
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
156
|
+
}
|
|
157
|
+
var STRICT_UNSUPPORTED_KEYWORDS = /* @__PURE__ */ new Set([
|
|
158
|
+
// strings
|
|
159
|
+
"minLength",
|
|
160
|
+
"maxLength",
|
|
161
|
+
"pattern",
|
|
162
|
+
"format",
|
|
163
|
+
// numbers / integers
|
|
164
|
+
"minimum",
|
|
165
|
+
"maximum",
|
|
166
|
+
"exclusiveMinimum",
|
|
167
|
+
"exclusiveMaximum",
|
|
168
|
+
"multipleOf",
|
|
169
|
+
// arrays
|
|
170
|
+
"minItems",
|
|
171
|
+
"maxItems",
|
|
172
|
+
"uniqueItems",
|
|
173
|
+
"minContains",
|
|
174
|
+
"maxContains",
|
|
175
|
+
// objects
|
|
176
|
+
"minProperties",
|
|
177
|
+
"maxProperties",
|
|
178
|
+
"patternProperties",
|
|
179
|
+
"propertyNames",
|
|
180
|
+
"dependentRequired",
|
|
181
|
+
"dependentSchemas",
|
|
182
|
+
"unevaluatedProperties",
|
|
183
|
+
// annotations strict parsers reject
|
|
184
|
+
"default",
|
|
185
|
+
"examples",
|
|
186
|
+
"$schema",
|
|
187
|
+
"$comment",
|
|
188
|
+
"contentEncoding",
|
|
189
|
+
"contentMediaType"
|
|
190
|
+
]);
|
|
191
|
+
function normalizeStrictJsonSchema(schema) {
|
|
192
|
+
if (Array.isArray(schema)) {
|
|
193
|
+
return schema.map((item) => normalizeStrictJsonSchema(item));
|
|
194
|
+
}
|
|
195
|
+
if (!isRecord(schema)) {
|
|
196
|
+
return schema;
|
|
197
|
+
}
|
|
198
|
+
const normalized = {};
|
|
199
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
200
|
+
if (STRICT_UNSUPPORTED_KEYWORDS.has(key)) continue;
|
|
201
|
+
if (key === "properties" && isRecord(value)) {
|
|
202
|
+
const props = {};
|
|
203
|
+
for (const [propName, propSchema] of Object.entries(value)) {
|
|
204
|
+
props[propName] = normalizeStrictJsonSchema(propSchema);
|
|
205
|
+
}
|
|
206
|
+
normalized[key] = props;
|
|
207
|
+
} else if (key === "enum" || key === "const") {
|
|
208
|
+
normalized[key] = value;
|
|
209
|
+
} else {
|
|
210
|
+
normalized[key] = normalizeStrictJsonSchema(value);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const properties = isRecord(normalized.properties) ? normalized.properties : void 0;
|
|
214
|
+
const type = normalized.type;
|
|
215
|
+
const isObjectSchema = type === "object" || Array.isArray(type) && type.includes("object") || !!properties;
|
|
216
|
+
if (isObjectSchema) {
|
|
217
|
+
if (normalized.type === void 0) {
|
|
218
|
+
normalized.type = "object";
|
|
219
|
+
}
|
|
220
|
+
normalized.properties = properties || {};
|
|
221
|
+
normalized.required = Object.keys(normalized.properties);
|
|
222
|
+
normalized.additionalProperties = false;
|
|
223
|
+
}
|
|
224
|
+
return normalized;
|
|
225
|
+
}
|
|
226
|
+
function normalizeStrictToolParameters(parameters) {
|
|
227
|
+
const base = isRecord(parameters) ? { ...parameters } : {};
|
|
228
|
+
if (base.type === void 0) base.type = "object";
|
|
229
|
+
if (base.properties === void 0) base.properties = {};
|
|
230
|
+
return normalizeStrictJsonSchema(base);
|
|
231
|
+
}
|
|
149
232
|
function transformChatTool(tool) {
|
|
150
233
|
const inputParams = tool.function.parameters;
|
|
151
|
-
const parameters = inputParams && typeof inputParams === "object" ? {
|
|
152
|
-
...inputParams,
|
|
153
|
-
additionalProperties: false
|
|
154
|
-
} : {
|
|
155
|
-
type: "object",
|
|
156
|
-
properties: {},
|
|
157
|
-
required: [],
|
|
158
|
-
additionalProperties: false
|
|
159
|
-
};
|
|
160
234
|
return {
|
|
161
235
|
type: "function",
|
|
162
236
|
function: {
|
|
163
237
|
name: tool.function.name,
|
|
164
238
|
description: tool.function.description || void 0,
|
|
165
|
-
parameters,
|
|
239
|
+
parameters: normalizeStrictToolParameters(inputParams),
|
|
166
240
|
strict: true
|
|
167
241
|
}
|
|
168
242
|
};
|
|
@@ -213,7 +287,7 @@ function extractChatToolCalls(toolCalls) {
|
|
|
213
287
|
};
|
|
214
288
|
});
|
|
215
289
|
}
|
|
216
|
-
function transformChatUsage(usage) {
|
|
290
|
+
function transformChatUsage(usage, modelId) {
|
|
217
291
|
if (!usage) {
|
|
218
292
|
return {
|
|
219
293
|
promptTokens: 0,
|
|
@@ -221,13 +295,18 @@ function transformChatUsage(usage) {
|
|
|
221
295
|
totalTokens: 0
|
|
222
296
|
};
|
|
223
297
|
}
|
|
224
|
-
|
|
298
|
+
const mapped = {
|
|
225
299
|
promptTokens: usage.prompt_tokens || 0,
|
|
226
300
|
completionTokens: usage.completion_tokens || 0,
|
|
227
301
|
totalTokens: usage.total_tokens || 0,
|
|
228
302
|
reasoningTokens: usage.completion_tokens_details?.reasoning_tokens,
|
|
229
303
|
cachedTokens: usage.prompt_tokens_details?.cached_tokens
|
|
230
304
|
};
|
|
305
|
+
const cost = calculateCerebrasUsageCost(modelId, mapped);
|
|
306
|
+
if (cost !== void 0) {
|
|
307
|
+
mapped.cost = cost;
|
|
308
|
+
}
|
|
309
|
+
return mapped;
|
|
231
310
|
}
|
|
232
311
|
function transformChatResponse(response) {
|
|
233
312
|
const choice = response.choices?.[0];
|
|
@@ -239,7 +318,7 @@ function transformChatResponse(response) {
|
|
|
239
318
|
reasoningDetails: reasoning ? [{ type: "text", text: reasoning }] : void 0,
|
|
240
319
|
toolCalls: extractChatToolCalls(message?.tool_calls),
|
|
241
320
|
finishReason: mapChatFinishReason(choice?.finish_reason),
|
|
242
|
-
usage: transformChatUsage(response.usage),
|
|
321
|
+
usage: transformChatUsage(response.usage, response.model),
|
|
243
322
|
metadata: {
|
|
244
323
|
model: response.model,
|
|
245
324
|
provider: "cerebras",
|
|
@@ -250,8 +329,9 @@ function transformChatResponse(response) {
|
|
|
250
329
|
}
|
|
251
330
|
};
|
|
252
331
|
}
|
|
253
|
-
function createChatStreamState() {
|
|
332
|
+
function createChatStreamState(model) {
|
|
254
333
|
return {
|
|
334
|
+
model,
|
|
255
335
|
content: "",
|
|
256
336
|
toolCalls: /* @__PURE__ */ new Map(),
|
|
257
337
|
reasoningContent: "",
|
|
@@ -328,7 +408,7 @@ function processChatStreamChunk(chunk, state) {
|
|
|
328
408
|
chunks.push({
|
|
329
409
|
type: "finish",
|
|
330
410
|
finishReason: mapChatFinishReason(state.finishReason),
|
|
331
|
-
usage: transformChatUsage(chunk.usage),
|
|
411
|
+
usage: transformChatUsage(chunk.usage, chunk.model || state.model),
|
|
332
412
|
reasoningDetails
|
|
333
413
|
});
|
|
334
414
|
}
|
|
@@ -765,7 +845,7 @@ var CerebrasProvider = class _CerebrasProvider {
|
|
|
765
845
|
}
|
|
766
846
|
return {
|
|
767
847
|
async *[Symbol.asyncIterator]() {
|
|
768
|
-
const state = createChatStreamState();
|
|
848
|
+
const state = createChatStreamState(request.model);
|
|
769
849
|
try {
|
|
770
850
|
for await (const chunk of parseChatSSEStream(response, state)) {
|
|
771
851
|
yield chunk;
|
|
@@ -874,7 +954,9 @@ var cerebras = Object.assign(
|
|
|
874
954
|
);
|
|
875
955
|
export {
|
|
876
956
|
CerebrasProvider,
|
|
957
|
+
calculateCerebrasUsageCost,
|
|
877
958
|
cerebras,
|
|
878
|
-
cerebrasProviderOptions
|
|
959
|
+
cerebrasProviderOptions,
|
|
960
|
+
getCerebrasModelPricing
|
|
879
961
|
};
|
|
880
962
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CerebrasProvider.ts","../src/chat-completions-transformers.ts","../src/icons.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import type {\n LLMProviderInterface as Provider,\n ProviderFactoryConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ModelCapabilities,\n ProviderModelInfo,\n InspectedRequest,\n} from '@standardagents/spec';\nimport { ProviderError } from '@standardagents/spec';\nimport {\n buildChatParams,\n transformChatResponse,\n createChatStreamState,\n parseChatSSEStream,\n createChatErrorChunk,\n truncateChatBase64,\n} from './chat-completions-transformers';\nimport { getCerebrasIconDataUri, getCerebrasModelIconDataUri } from './icons';\n\nexport { ProviderError };\n\ninterface CerebrasPublicModelInfo {\n id: string;\n name?: string;\n description?: string;\n input_modalities?: string[];\n output_modalities?: string[];\n context_length?: number;\n max_output_length?: number;\n pricing?: {\n prompt?: string;\n completion?: string;\n };\n supported_sampling_parameters?: string[];\n supported_features?: string[];\n openrouter?: {\n slug?: string;\n };\n}\n\nconst STATIC_MODELS: Array<CerebrasPublicModelInfo & {\n capabilities?: ModelCapabilities;\n}> = [\n {\n id: 'llama3.1-8b',\n name: 'Llama 3.1 8B',\n description: 'Fast general-purpose Cerebras model.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 32768,\n max_output_length: 8192,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n },\n {\n id: 'qwen-3-235b-a22b-instruct-2507',\n name: 'Qwen 3 235B Instruct',\n description: 'Large instruct model with tool use and structured outputs.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 131072,\n max_output_length: 40960,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n },\n {\n id: 'gpt-oss-120b',\n name: 'GPT OSS 120B',\n description: 'Large reasoning-focused Cerebras model.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 128000,\n max_output_length: 64000,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 128000,\n maxOutputTokens: 64000,\n reasoningLevels: { 0: null, 33: 'low', 66: 'medium', 100: 'high' },\n },\n },\n {\n id: 'zai-glm-4.7',\n name: 'Z.ai GLM 4.7',\n description: 'Preview Cerebras reasoning model with optional preserved thinking.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 128000,\n max_output_length: 64000,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 128000,\n maxOutputTokens: 64000,\n reasoningLevels: { 0: 'none', 100: null },\n },\n },\n];\n\nexport class CerebrasProvider implements Provider {\n readonly name = 'cerebras';\n readonly specificationVersion = '1' as const;\n\n private config: ProviderFactoryConfig;\n\n private static modelsCache: CerebrasPublicModelInfo[] | null = null;\n private static modelsCacheTime = 0;\n private static readonly CACHE_TTL = 5 * 60 * 1000;\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n }\n\n supportsModel(_modelId: string): boolean {\n return true;\n }\n\n getIcon(modelId?: string): string {\n return getCerebrasModelIconDataUri(modelId) || getCerebrasIconDataUri();\n }\n\n private async fetchModelsWithCache(): Promise<CerebrasPublicModelInfo[]> {\n const now = Date.now();\n\n if (\n CerebrasProvider.modelsCache &&\n now - CerebrasProvider.modelsCacheTime < CerebrasProvider.CACHE_TTL\n ) {\n return CerebrasProvider.modelsCache;\n }\n\n const response = await fetch('https://api.cerebras.ai/public/v1/models?format=openrouter');\n if (!response.ok) {\n throw new Error(`Cerebras public models API error: ${response.status}`);\n }\n\n const data = await response.json() as { data?: CerebrasPublicModelInfo[] };\n const merged = new Map<string, CerebrasPublicModelInfo>();\n\n for (const model of STATIC_MODELS) {\n merged.set(model.id, model);\n }\n\n for (const model of data.data || []) {\n merged.set(model.id, { ...merged.get(model.id), ...model });\n }\n\n CerebrasProvider.modelsCache = Array.from(merged.values());\n CerebrasProvider.modelsCacheTime = now;\n\n return CerebrasProvider.modelsCache;\n }\n\n private mapModelCapabilities(model: CerebrasPublicModelInfo): ModelCapabilities {\n const staticModel = STATIC_MODELS.find((candidate) => candidate.id === model.id);\n if (staticModel?.capabilities) {\n return { ...staticModel.capabilities };\n }\n\n const features = new Set(model.supported_features || []);\n const inputModalities = new Set(model.input_modalities || []);\n\n return {\n supportsImages: inputModalities.has('image'),\n supportsToolCalls: features.has('tools'),\n supportsStreaming: true,\n supportsJsonMode: features.has('json_mode') || features.has('structured_outputs'),\n maxContextTokens: model.context_length,\n maxOutputTokens: model.max_output_length,\n };\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n try {\n const models = await this.fetchModelsWithCache();\n const model = models.find((candidate) => candidate.id === modelId);\n if (!model) return null;\n return this.mapModelCapabilities(model);\n } catch (error) {\n console.error(`Failed to fetch capabilities for Cerebras model ${modelId}:`, error);\n return null;\n }\n }\n\n private mapToProviderModelInfo(model: CerebrasPublicModelInfo): ProviderModelInfo {\n return {\n id: model.id,\n name: model.name || model.id,\n description: model.description,\n contextLength: model.context_length,\n iconId: this.getIcon(model.id),\n slug: model.openrouter?.slug || model.id,\n };\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n try {\n let models = (await this.fetchModelsWithCache())\n .map((model) => this.mapToProviderModelInfo(model))\n .sort((a, b) => a.name.localeCompare(b.name));\n\n if (filter) {\n const lowerFilter = filter.toLowerCase();\n models = models.filter(\n (model) =>\n model.id.toLowerCase().includes(lowerFilter) ||\n model.name.toLowerCase().includes(lowerFilter) ||\n (model.description && model.description.toLowerCase().includes(lowerFilter))\n );\n }\n\n return models;\n } catch (error) {\n console.error('Failed to fetch models from Cerebras:', error);\n return STATIC_MODELS.map((model) => this.mapToProviderModelInfo(model));\n }\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n const apiKey = this.config.apiKey;\n const baseUrl = this.config.baseUrl || 'https://api.cerebras.ai/v1';\n\n try {\n const response = await fetch(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(buildChatParams(request)),\n signal: request.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorMessage = `Cerebras API error: ${response.status}`;\n try {\n const errorJson = JSON.parse(errorText) as {\n error?: { message?: string };\n message?: string;\n };\n errorMessage = errorJson.error?.message || errorJson.message || errorMessage;\n } catch {\n errorMessage = errorText || errorMessage;\n }\n\n throw this.toHttpProviderError(errorMessage, response.status, response.headers);\n }\n\n const data = await response.json();\n return transformChatResponse(data);\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n const self = this;\n const apiKey = this.config.apiKey;\n const baseUrl = this.config.baseUrl || 'https://api.cerebras.ai/v1';\n\n try {\n const response = await fetch(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n ...buildChatParams(request),\n stream: true,\n stream_options: { include_usage: true },\n }),\n signal: request.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorMessage = `Cerebras API error: ${response.status}`;\n try {\n const errorJson = JSON.parse(errorText) as {\n error?: { message?: string };\n message?: string;\n };\n errorMessage = errorJson.error?.message || errorJson.message || errorMessage;\n } catch {\n errorMessage = errorText || errorMessage;\n }\n\n throw this.toHttpProviderError(errorMessage, response.status, response.headers);\n }\n\n return {\n async *[Symbol.asyncIterator]() {\n const state = createChatStreamState();\n\n try {\n for await (const chunk of parseChatSSEStream(response, state)) {\n yield chunk;\n }\n } catch (error) {\n const providerError = self.toProviderError(error);\n yield createChatErrorChunk(providerError.message, providerError.code);\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) {\n return error;\n }\n\n if (error instanceof Error) {\n const anyError = error as Error & {\n status?: number;\n statusCode?: number;\n headers?: Record<string, string>;\n code?: string;\n };\n\n const status = anyError.status || anyError.statusCode;\n const retryAfter = anyError.headers?.['retry-after']\n ? parseInt(anyError.headers['retry-after'], 10)\n : undefined;\n\n if (status === 429) {\n return new ProviderError(error.message, 'rate_limit', status, retryAfter);\n }\n if (status === 401 || status === 403) {\n return new ProviderError(error.message, 'auth_error', status);\n }\n if (status === 400) {\n return new ProviderError(error.message, 'invalid_request', status);\n }\n if (status && status >= 500) {\n return new ProviderError(error.message, 'server_error', status);\n }\n if (error.name === 'AbortError' || anyError.code === 'ETIMEDOUT') {\n return new ProviderError(error.message, 'timeout');\n }\n\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n\n private toHttpProviderError(\n message: string,\n status: number,\n headers?: Headers\n ): ProviderError {\n const retryAfterHeader = headers?.get('retry-after');\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n\n if (status === 429) {\n return new ProviderError(message, 'rate_limit', status, retryAfter);\n }\n if (status === 401 || status === 403) {\n return new ProviderError(message, 'auth_error', status);\n }\n if (status === 400) {\n return new ProviderError(message, 'invalid_request', status);\n }\n if (status >= 500) {\n return new ProviderError(message, 'server_error', status);\n }\n\n return new ProviderError(message, 'unknown', status);\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n const params = buildChatParams(request);\n\n return {\n body: truncateChatBase64(params as Record<string, unknown>),\n messagesPath: 'messages',\n metadata: {\n endpoint: 'POST /v1/chat/completions',\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n };\n }\n}\n","import type {\n ProviderRequest,\n ProviderResponse,\n ProviderMessage,\n ProviderTool,\n ProviderToolCallPart,\n ProviderFinishReason,\n ProviderUsage,\n ProviderStreamChunk,\n ContentPart,\n ProviderReasoningDetail,\n} from '@standardagents/spec';\n\nexport type CerebrasChatContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: { url: string; detail?: 'auto' | 'low' | 'high' } };\n\nexport type CerebrasChatMessage =\n | { role: 'system'; content: string }\n | { role: 'user'; content: string | CerebrasChatContentPart[] }\n | {\n role: 'assistant';\n content?: string | null;\n tool_calls?: CerebrasChatToolCall[];\n reasoning?: string | null;\n }\n | { role: 'tool'; tool_call_id: string; content: string };\n\nexport interface CerebrasChatToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface CerebrasChatTool {\n type: 'function';\n function: {\n name: string;\n description?: string;\n parameters?: Record<string, unknown>;\n strict?: boolean;\n };\n}\n\nexport type CerebrasChatToolChoice =\n | 'auto'\n | 'none'\n | 'required'\n | { type: 'function'; function: { name: string } };\n\nexport interface CerebrasChatCompletionRequest {\n model: string;\n messages: CerebrasChatMessage[];\n tools?: CerebrasChatTool[];\n tool_choice?: CerebrasChatToolChoice;\n parallel_tool_calls?: boolean;\n max_completion_tokens?: number;\n temperature?: number;\n top_p?: number;\n stop?: string[];\n stream?: boolean;\n stream_options?: { include_usage?: boolean };\n reasoning_effort?: 'none' | 'low' | 'medium' | 'high';\n clear_thinking?: boolean;\n logprobs?: boolean;\n top_logprobs?: number;\n seed?: number;\n user?: string;\n service_tier?: 'priority' | 'default' | 'auto' | 'flex';\n response_format?:\n | { type: 'json_object' }\n | { type: 'json_schema'; json_schema: { name: string; schema: Record<string, unknown>; strict?: boolean } };\n [key: string]: unknown;\n}\n\nexport interface CerebrasChatCompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n completion_tokens_details?: {\n reasoning_tokens?: number;\n accepted_prediction_tokens?: number;\n rejected_prediction_tokens?: number;\n };\n}\n\nexport interface CerebrasChatCompletionResponse {\n id: string;\n model?: string;\n service_tier_used?: string;\n system_fingerprint?: string;\n time_info?: Record<string, unknown>;\n choices: Array<{\n index: number;\n message: {\n role: 'assistant';\n content: string | null;\n reasoning?: string | null;\n tool_calls?: CerebrasChatToolCall[];\n };\n finish_reason: string;\n }>;\n usage?: CerebrasChatCompletionUsage;\n}\n\nexport interface CerebrasChatStreamChunk {\n id?: string;\n model?: string;\n choices?: Array<{\n index: number;\n delta: {\n role?: string;\n content?: string | null;\n reasoning?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string | null;\n }>;\n usage?: CerebrasChatCompletionUsage;\n}\n\nexport function transformChatContentPart(part: ContentPart): CerebrasChatContentPart {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n\n if (part.type === 'image') {\n const data = part.data || '';\n const imageUrl = data.startsWith('data:')\n ? data\n : `data:${part.mediaType || 'image/png'};base64,${data}`;\n\n return {\n type: 'image_url',\n image_url: {\n url: imageUrl,\n detail: part.detail || 'auto',\n },\n };\n }\n\n if (part.type === 'image_url') {\n return {\n type: 'image_url',\n image_url: {\n url: part.image_url?.url || '',\n detail: part.image_url?.detail || 'auto',\n },\n };\n }\n\n return {\n type: 'text',\n text: `[File: ${part.filename || 'file'}]`,\n };\n}\n\nexport function transformChatMessageContent(\n content: string | ContentPart[]\n): string | CerebrasChatContentPart[] {\n if (typeof content === 'string') {\n return content;\n }\n return content.map(transformChatContentPart);\n}\n\nexport function transformChatSystemMessage(\n msg: ProviderMessage & { role: 'system' }\n): CerebrasChatMessage {\n return {\n role: 'system',\n content: msg.content,\n };\n}\n\nexport function transformChatUserMessage(\n msg: ProviderMessage & { role: 'user' }\n): CerebrasChatMessage {\n return {\n role: 'user',\n content: transformChatMessageContent(msg.content),\n };\n}\n\nexport function transformChatAssistantMessage(\n msg: ProviderMessage & { role: 'assistant' }\n): CerebrasChatMessage {\n const message: CerebrasChatMessage & { role: 'assistant' } = {\n role: 'assistant',\n content: msg.content || null,\n };\n\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n message.tool_calls = msg.toolCalls.map((tc) => ({\n id: tc.id,\n type: 'function',\n function: {\n name: tc.name,\n arguments: typeof tc.arguments === 'string'\n ? tc.arguments\n : JSON.stringify(tc.arguments),\n },\n }));\n }\n\n if (msg.reasoning) {\n message.reasoning = msg.reasoning;\n }\n\n return message;\n}\n\nexport type CerebrasChatToolMessageResult = {\n toolMessage: CerebrasChatMessage & { role: 'tool' };\n syntheticUserMessage?: CerebrasChatMessage & { role: 'user' };\n};\n\nexport function transformChatToolMessage(\n msg: ProviderMessage & { role: 'tool' }\n): CerebrasChatToolMessageResult {\n let output: string;\n\n if (typeof msg.content === 'string') {\n output = msg.content;\n } else if ('type' in msg.content) {\n if (msg.content.type === 'text') {\n output = msg.content.text;\n } else if (msg.content.type === 'error') {\n output = `Error: ${msg.content.error}`;\n } else {\n output = JSON.stringify(msg.content);\n }\n } else {\n output = JSON.stringify(msg.content);\n }\n\n const imageAttachments = msg.attachments?.filter(a => a.type === 'image' && a.data) || [];\n const toolMessage: CerebrasChatMessage & { role: 'tool' } = {\n role: 'tool',\n tool_call_id: msg.toolCallId,\n content: output || (imageAttachments.length > 0 ? 'Success' : ''),\n };\n\n if (imageAttachments.length === 0) {\n return { toolMessage };\n }\n\n const imageContent: CerebrasChatContentPart[] = [];\n const toolName = msg.toolName || 'the tool';\n const isSingle = imageAttachments.length === 1;\n const descriptor = isSingle ? 'the file' : `${imageAttachments.length} files`;\n const verb = isSingle ? 'is' : 'are';\n\n imageContent.push({\n type: 'text',\n text: `Here ${verb} ${descriptor} from ${toolName}:`,\n });\n\n for (const attachment of imageAttachments) {\n const attachmentData = attachment.data || '';\n const imageData = attachmentData.startsWith('data:')\n ? attachmentData\n : `data:${attachment.mediaType || 'image/png'};base64,${attachmentData}`;\n\n imageContent.push({\n type: 'image_url',\n image_url: {\n url: imageData,\n detail: 'auto',\n },\n });\n }\n\n return {\n toolMessage,\n syntheticUserMessage: {\n role: 'user',\n content: imageContent,\n },\n };\n}\n\nexport function transformChatMessages(messages: ProviderMessage[]): CerebrasChatMessage[] {\n const result: CerebrasChatMessage[] = [];\n\n for (const msg of messages) {\n switch (msg.role) {\n case 'system':\n result.push(transformChatSystemMessage(msg));\n break;\n case 'user':\n result.push(transformChatUserMessage(msg));\n break;\n case 'assistant':\n result.push(transformChatAssistantMessage(msg));\n break;\n case 'tool': {\n const { toolMessage, syntheticUserMessage } = transformChatToolMessage(msg);\n result.push(toolMessage);\n if (syntheticUserMessage) {\n result.push(syntheticUserMessage);\n }\n break;\n }\n }\n }\n\n return result;\n}\n\nexport function transformChatTool(tool: ProviderTool): CerebrasChatTool {\n const inputParams = tool.function.parameters as Record<string, unknown> | null | undefined;\n\n const parameters = inputParams && typeof inputParams === 'object'\n ? {\n ...inputParams,\n additionalProperties: false,\n }\n : {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false,\n };\n\n return {\n type: 'function',\n function: {\n name: tool.function.name,\n description: tool.function.description || undefined,\n parameters,\n strict: true,\n },\n };\n}\n\nexport function transformChatTools(tools: ProviderTool[]): CerebrasChatTool[] {\n return tools.map(transformChatTool);\n}\n\nexport function transformChatToolChoice(\n choice: ProviderRequest['toolChoice']\n): CerebrasChatToolChoice | undefined {\n if (choice === 'auto') return 'auto';\n if (choice === 'none') return 'none';\n if (choice === 'required') return 'required';\n if (typeof choice === 'object' && 'name' in choice) {\n return { type: 'function', function: { name: choice.name } };\n }\n return undefined;\n}\n\nexport function mapChatFinishReason(finishReason: string | null | undefined): ProviderFinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'tool_calls':\n return 'tool_calls';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content_filter';\n case 'error':\n return 'error';\n default:\n return 'stop';\n }\n}\n\nexport function extractChatToolCalls(\n toolCalls: CerebrasChatToolCall[] | undefined\n): ProviderToolCallPart[] | undefined {\n if (!toolCalls || toolCalls.length === 0) {\n return undefined;\n }\n\n return toolCalls.map((tc) => {\n let parsedArgs: Record<string, unknown> = {};\n try {\n parsedArgs = tc.function.arguments ? JSON.parse(tc.function.arguments) : {};\n } catch {\n parsedArgs = {};\n }\n\n return {\n id: tc.id,\n name: tc.function.name,\n arguments: parsedArgs,\n };\n });\n}\n\nexport function transformChatUsage(\n usage: CerebrasChatCompletionUsage | null | undefined\n): ProviderUsage {\n if (!usage) {\n return {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n }\n\n return {\n promptTokens: usage.prompt_tokens || 0,\n completionTokens: usage.completion_tokens || 0,\n totalTokens: usage.total_tokens || 0,\n reasoningTokens: usage.completion_tokens_details?.reasoning_tokens,\n cachedTokens: usage.prompt_tokens_details?.cached_tokens,\n };\n}\n\nexport function transformChatResponse(response: CerebrasChatCompletionResponse): ProviderResponse {\n const choice = response.choices?.[0];\n const message = choice?.message;\n const reasoning = message?.reasoning || null;\n\n return {\n content: message?.content || null,\n reasoning,\n reasoningDetails: reasoning ? [{ type: 'text', text: reasoning }] : undefined,\n toolCalls: extractChatToolCalls(message?.tool_calls),\n finishReason: mapChatFinishReason(choice?.finish_reason),\n usage: transformChatUsage(response.usage),\n metadata: {\n model: response.model,\n provider: 'cerebras',\n requestId: response.id,\n serviceTierUsed: response.service_tier_used,\n systemFingerprint: response.system_fingerprint,\n timeInfo: response.time_info,\n },\n };\n}\n\nexport interface CerebrasChatStreamState {\n content: string;\n toolCalls: Map<number, { id: string; name: string; arguments: string }>;\n reasoningContent: string;\n hasContent: boolean;\n hasReasoning: boolean;\n finishReason: string | null;\n}\n\nexport function createChatStreamState(): CerebrasChatStreamState {\n return {\n content: '',\n toolCalls: new Map(),\n reasoningContent: '',\n hasContent: false,\n hasReasoning: false,\n finishReason: null,\n };\n}\n\nexport function processChatStreamChunk(\n chunk: CerebrasChatStreamChunk,\n state: CerebrasChatStreamState\n): ProviderStreamChunk[] {\n const chunks: ProviderStreamChunk[] = [];\n const choice = chunk.choices?.[0];\n const delta = choice?.delta;\n\n if (!delta && !choice?.finish_reason && !chunk.usage) {\n return chunks;\n }\n\n if (delta?.content) {\n state.hasContent = true;\n state.content += delta.content;\n chunks.push({ type: 'content-delta', delta: delta.content });\n }\n\n if (delta?.reasoning) {\n state.hasReasoning = true;\n state.reasoningContent += delta.reasoning;\n chunks.push({ type: 'reasoning-delta', delta: delta.reasoning });\n }\n\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n const existing = state.toolCalls.get(tc.index);\n\n if (tc.id && tc.function?.name) {\n state.toolCalls.set(tc.index, {\n id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments || '',\n });\n chunks.push({\n type: 'tool-call-start',\n id: tc.id,\n name: tc.function.name,\n });\n } else if (existing && tc.function?.arguments) {\n existing.arguments += tc.function.arguments;\n chunks.push({\n type: 'tool-call-delta',\n id: existing.id,\n argumentsDelta: tc.function.arguments,\n });\n }\n }\n }\n\n if (choice?.finish_reason) {\n state.finishReason = choice.finish_reason;\n\n if (state.hasContent) {\n chunks.push({ type: 'content-done' });\n }\n\n if (state.hasReasoning) {\n chunks.push({ type: 'reasoning-done' });\n }\n\n for (const tc of state.toolCalls.values()) {\n let parsedArgs: Record<string, unknown> = {};\n try {\n parsedArgs = tc.arguments ? JSON.parse(tc.arguments) : {};\n } catch {\n parsedArgs = {};\n }\n\n chunks.push({\n type: 'tool-call-done',\n id: tc.id,\n arguments: parsedArgs,\n });\n }\n }\n\n if (chunk.usage) {\n const reasoningDetails: ProviderReasoningDetail[] | undefined = state.reasoningContent\n ? [{ type: 'text', text: state.reasoningContent }]\n : undefined;\n\n chunks.push({\n type: 'finish',\n finishReason: mapChatFinishReason(state.finishReason),\n usage: transformChatUsage(chunk.usage),\n reasoningDetails,\n });\n }\n\n return chunks;\n}\n\nexport function parseChatStreamEvent(jsonStr: string): CerebrasChatStreamChunk | null {\n try {\n return JSON.parse(jsonStr) as CerebrasChatStreamChunk;\n } catch {\n return null;\n }\n}\n\nexport async function* parseChatSSEStream(\n response: Response,\n state: CerebrasChatStreamState\n): AsyncIterable<ProviderStreamChunk> {\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (!trimmed.startsWith('data: ')) continue;\n\n const data = trimmed.slice(6);\n if (data === '[DONE]') continue;\n\n const chunk = parseChatStreamEvent(data);\n if (!chunk) continue;\n\n for (const providerChunk of processChatStreamChunk(chunk, state)) {\n yield providerChunk;\n }\n }\n }\n\n if (buffer.trim()) {\n const trimmed = buffer.trim();\n if (trimmed.startsWith('data: ')) {\n const data = trimmed.slice(6);\n if (data !== '[DONE]') {\n const chunk = parseChatStreamEvent(data);\n if (chunk) {\n for (const providerChunk of processChatStreamChunk(chunk, state)) {\n yield providerChunk;\n }\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction mapCerebrasReasoningEffort(\n model: string,\n level: number\n): 'none' | 'low' | 'medium' | 'high' | undefined {\n if (model.startsWith('gpt-oss-')) {\n if (level >= 100) return 'high';\n if (level >= 66) return 'medium';\n if (level >= 33) return 'low';\n if (level > 0) return 'low';\n return undefined;\n }\n\n if (model.startsWith('zai-glm-4.7')) {\n return level === 0 ? 'none' : undefined;\n }\n\n return undefined;\n}\n\nexport function buildChatParams(request: ProviderRequest): CerebrasChatCompletionRequest {\n const params: CerebrasChatCompletionRequest = {\n model: request.model,\n messages: transformChatMessages(request.messages),\n };\n\n if (request.tools && request.tools.length > 0) {\n params.tools = transformChatTools(request.tools);\n\n const toolChoice = transformChatToolChoice(request.toolChoice);\n if (toolChoice !== undefined) {\n params.tool_choice = toolChoice;\n }\n\n if (request.parallelToolCalls !== undefined) {\n params.parallel_tool_calls = request.parallelToolCalls;\n }\n }\n\n if (request.maxOutputTokens !== undefined) {\n params.max_completion_tokens = request.maxOutputTokens;\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.topP !== undefined) {\n params.top_p = request.topP;\n }\n\n if (request.stopSequences && request.stopSequences.length > 0) {\n params.stop = request.stopSequences;\n }\n\n if (request.reasoning?.level !== undefined) {\n const effort = mapCerebrasReasoningEffort(request.model, request.reasoning.level);\n if (effort) {\n params.reasoning_effort = effort;\n }\n }\n\n if (request.responseFormat?.type === 'json') {\n if (request.responseFormat.schema) {\n params.response_format = {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n schema: request.responseFormat.schema,\n strict: true,\n },\n };\n } else {\n params.response_format = { type: 'json_object' };\n }\n }\n\n if (request.providerOptions) {\n const { _metadata, ...safeOptions } = request.providerOptions as Record<string, unknown> & {\n _metadata?: unknown;\n };\n Object.assign(params, safeOptions);\n }\n\n return params;\n}\n\nexport function createChatErrorChunk(error: string, code?: string): ProviderStreamChunk {\n return { type: 'error', error, code };\n}\n\nfunction isBase64Like(str: string): boolean {\n if (str.startsWith('data:')) return true;\n if (str.length > 200) {\n const base64Pattern = /^[A-Za-z0-9+/]+=*$/;\n return base64Pattern.test(str.substring(0, 200));\n }\n return false;\n}\n\nfunction truncateBase64String(str: string, maxLength: number = 50): string {\n if (str.length <= maxLength) return str;\n const preview = str.substring(0, maxLength);\n return `${preview}...[truncated, ${str.length.toLocaleString()} chars]`;\n}\n\nexport function truncateChatBase64<T>(obj: T, maxLength: number = 50): T {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === 'string') {\n return (isBase64Like(obj) ? truncateBase64String(obj, maxLength) : obj) as T;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => truncateChatBase64(item, maxLength)) as T;\n }\n\n if (typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = truncateChatBase64(value, maxLength);\n }\n return result as T;\n }\n\n return obj;\n}\n","import META_ICON_FILE from './vendor-icons/meta.svg';\nimport OPENAI_ICON_FILE from './vendor-icons/openai.svg';\nimport QWEN_ICON_FILE from './vendor-icons/qwen.svg';\nimport ZAI_ORG_ICON_FILE from './vendor-icons/zai-org.svg';\n\nconst CEREBRAS_ICON = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" fill=\"none\">\n <defs>\n <linearGradient id=\"cerebras-gradient\" x1=\"12\" y1=\"10\" x2=\"52\" y2=\"54\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#F97316\" />\n <stop offset=\"1\" stop-color=\"#EA580C\" />\n </linearGradient>\n </defs>\n <rect width=\"64\" height=\"64\" rx=\"16\" fill=\"#111827\" />\n <path\n d=\"M43.5 20.5C40.8 17.8 36.7 16 32 16C23.2 16 16 23.2 16 32C16 40.8 23.2 48 32 48C36.7 48 40.8 46.2 43.5 43.5\"\n stroke=\"url(#cerebras-gradient)\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M46.5 24.5L33.5 37.5L27.5 31.5\"\n stroke=\"url(#cerebras-gradient)\"\n stroke-width=\"5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n</svg>\n`;\n\nconst META_ICON = META_ICON_FILE;\nconst ALIBABA_ICON = QWEN_ICON_FILE;\nconst ZAI_ICON = ZAI_ORG_ICON_FILE;\nconst OPENAI_ICON = OPENAI_ICON_FILE;\n\nconst MODEL_ICON_PREFIXES: Array<{ prefix: string; icon: string }> = [\n { prefix: 'llama', icon: META_ICON },\n { prefix: 'gpt', icon: OPENAI_ICON },\n { prefix: 'zai', icon: ZAI_ICON },\n { prefix: 'qwen', icon: ALIBABA_ICON },\n];\n\nexport function svgToDataUri(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n}\n\nfunction normalizeIcon(icon: string): string {\n if (icon.startsWith('data:') || icon.endsWith('.svg') || icon.includes('.svg?')) {\n return icon;\n }\n return svgToDataUri(icon);\n}\n\nexport function getCerebrasIconDataUri(): string {\n return svgToDataUri(CEREBRAS_ICON);\n}\n\nexport function getCerebrasModelIconDataUri(modelId?: string): string | undefined {\n if (!modelId) return undefined;\n const normalizedModelId = modelId.trim().toLowerCase();\n const icon = MODEL_ICON_PREFIXES.find(({ prefix }) => normalizedModelId.startsWith(prefix))?.icon;\n return icon ? normalizeIcon(icon) : undefined;\n}\n","import { z } from 'zod';\n\n/**\n * Cerebras provider options schema.\n *\n * The provider uses Cerebras' Chat Completions API directly. The schema\n * covers the common documented parameters and remains passthrough for\n * forward compatibility with new API fields.\n */\nexport const cerebrasProviderOptions = z.object({\n /**\n * Clear reasoning from prior turns.\n * Supported on `zai-glm-4.7`.\n */\n clear_thinking: z.boolean().optional(),\n\n /** Return token log probabilities. */\n logprobs: z.boolean().optional(),\n\n /** Number of top logprobs to return when `logprobs` is enabled. */\n top_logprobs: z.number().int().min(0).max(20).optional(),\n\n /** Sampling seed for best-effort determinism. */\n seed: z.number().int().optional(),\n\n /** End-user identifier for abuse monitoring. */\n user: z.string().optional(),\n\n /**\n * Request prioritization.\n * `priority` and some other tiers may require dedicated/private access.\n */\n service_tier: z.enum(['priority', 'default', 'auto', 'flex']).optional(),\n\n /**\n * Override the model's reasoning behavior directly.\n * The provider also maps Standard Agents `reasoning.level` automatically.\n */\n reasoning_effort: z.enum(['none', 'low', 'medium', 'high']).optional(),\n}).passthrough();\n\nexport type CerebrasProviderOptions = z.infer<typeof cerebrasProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { CerebrasProvider } from './CerebrasProvider';\nimport { cerebrasProviderOptions } from './providerOptions';\n\n/**\n * Cerebras provider factory for Standard Agents.\n *\n * Uses Cerebras' OpenAI-compatible Chat Completions API with typed\n * providerOptions for Cerebras-specific request parameters.\n */\nexport const cerebras: ProviderFactoryWithOptions<typeof cerebrasProviderOptions> =\n Object.assign(\n (config: ProviderFactoryConfig) => new CerebrasProvider(config),\n { providerOptions: cerebrasProviderOptions }\n );\n\nexport { cerebrasProviderOptions, type CerebrasProviderOptions } from './providerOptions';\nexport { CerebrasProvider } from './CerebrasProvider';\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/CerebrasProvider.ts","../src/chat-completions-transformers.ts","../src/icons.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import type {\n LLMProviderInterface as Provider,\n ProviderFactoryConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ModelCapabilities,\n ProviderModelInfo,\n InspectedRequest,\n} from '@standardagents/spec';\nimport { ProviderError } from '@standardagents/spec';\nimport {\n buildChatParams,\n transformChatResponse,\n createChatStreamState,\n parseChatSSEStream,\n createChatErrorChunk,\n truncateChatBase64,\n} from './chat-completions-transformers';\nimport { getCerebrasIconDataUri, getCerebrasModelIconDataUri } from './icons';\n\nexport { ProviderError };\n\ninterface CerebrasPublicModelInfo {\n id: string;\n name?: string;\n description?: string;\n input_modalities?: string[];\n output_modalities?: string[];\n context_length?: number;\n max_output_length?: number;\n pricing?: {\n prompt?: string;\n completion?: string;\n };\n supported_sampling_parameters?: string[];\n supported_features?: string[];\n openrouter?: {\n slug?: string;\n };\n}\n\nconst STATIC_MODELS: Array<CerebrasPublicModelInfo & {\n capabilities?: ModelCapabilities;\n}> = [\n {\n id: 'llama3.1-8b',\n name: 'Llama 3.1 8B',\n description: 'Fast general-purpose Cerebras model.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 32768,\n max_output_length: 8192,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n },\n {\n id: 'qwen-3-235b-a22b-instruct-2507',\n name: 'Qwen 3 235B Instruct',\n description: 'Large instruct model with tool use and structured outputs.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 131072,\n max_output_length: 40960,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n },\n {\n id: 'gpt-oss-120b',\n name: 'GPT OSS 120B',\n description: 'Large reasoning-focused Cerebras model.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 128000,\n max_output_length: 64000,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 128000,\n maxOutputTokens: 64000,\n reasoningLevels: { 0: null, 33: 'low', 66: 'medium', 100: 'high' },\n },\n },\n {\n id: 'zai-glm-4.7',\n name: 'Z.ai GLM 4.7',\n description: 'Preview Cerebras reasoning model with optional preserved thinking.',\n input_modalities: ['text'],\n output_modalities: ['text'],\n context_length: 128000,\n max_output_length: 64000,\n supported_features: ['tools', 'json_mode', 'structured_outputs'],\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 128000,\n maxOutputTokens: 64000,\n reasoningLevels: { 0: 'none', 100: null },\n },\n },\n];\n\nexport class CerebrasProvider implements Provider {\n readonly name = 'cerebras';\n readonly specificationVersion = '1' as const;\n\n private config: ProviderFactoryConfig;\n\n private static modelsCache: CerebrasPublicModelInfo[] | null = null;\n private static modelsCacheTime = 0;\n private static readonly CACHE_TTL = 5 * 60 * 1000;\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n }\n\n supportsModel(_modelId: string): boolean {\n return true;\n }\n\n getIcon(modelId?: string): string {\n return getCerebrasModelIconDataUri(modelId) || getCerebrasIconDataUri();\n }\n\n private async fetchModelsWithCache(): Promise<CerebrasPublicModelInfo[]> {\n const now = Date.now();\n\n if (\n CerebrasProvider.modelsCache &&\n now - CerebrasProvider.modelsCacheTime < CerebrasProvider.CACHE_TTL\n ) {\n return CerebrasProvider.modelsCache;\n }\n\n const response = await fetch('https://api.cerebras.ai/public/v1/models?format=openrouter');\n if (!response.ok) {\n throw new Error(`Cerebras public models API error: ${response.status}`);\n }\n\n const data = await response.json() as { data?: CerebrasPublicModelInfo[] };\n const merged = new Map<string, CerebrasPublicModelInfo>();\n\n for (const model of STATIC_MODELS) {\n merged.set(model.id, model);\n }\n\n for (const model of data.data || []) {\n merged.set(model.id, { ...merged.get(model.id), ...model });\n }\n\n CerebrasProvider.modelsCache = Array.from(merged.values());\n CerebrasProvider.modelsCacheTime = now;\n\n return CerebrasProvider.modelsCache;\n }\n\n private mapModelCapabilities(model: CerebrasPublicModelInfo): ModelCapabilities {\n const staticModel = STATIC_MODELS.find((candidate) => candidate.id === model.id);\n if (staticModel?.capabilities) {\n return { ...staticModel.capabilities };\n }\n\n const features = new Set(model.supported_features || []);\n const inputModalities = new Set(model.input_modalities || []);\n\n return {\n supportsImages: inputModalities.has('image'),\n supportsToolCalls: features.has('tools'),\n supportsStreaming: true,\n supportsJsonMode: features.has('json_mode') || features.has('structured_outputs'),\n maxContextTokens: model.context_length,\n maxOutputTokens: model.max_output_length,\n };\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n try {\n const models = await this.fetchModelsWithCache();\n const model = models.find((candidate) => candidate.id === modelId);\n if (!model) return null;\n return this.mapModelCapabilities(model);\n } catch (error) {\n console.error(`Failed to fetch capabilities for Cerebras model ${modelId}:`, error);\n return null;\n }\n }\n\n private mapToProviderModelInfo(model: CerebrasPublicModelInfo): ProviderModelInfo {\n return {\n id: model.id,\n name: model.name || model.id,\n description: model.description,\n contextLength: model.context_length,\n iconId: this.getIcon(model.id),\n slug: model.openrouter?.slug || model.id,\n };\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n try {\n let models = (await this.fetchModelsWithCache())\n .map((model) => this.mapToProviderModelInfo(model))\n .sort((a, b) => a.name.localeCompare(b.name));\n\n if (filter) {\n const lowerFilter = filter.toLowerCase();\n models = models.filter(\n (model) =>\n model.id.toLowerCase().includes(lowerFilter) ||\n model.name.toLowerCase().includes(lowerFilter) ||\n (model.description && model.description.toLowerCase().includes(lowerFilter))\n );\n }\n\n return models;\n } catch (error) {\n console.error('Failed to fetch models from Cerebras:', error);\n return STATIC_MODELS.map((model) => this.mapToProviderModelInfo(model));\n }\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n const apiKey = this.config.apiKey;\n const baseUrl = this.config.baseUrl || 'https://api.cerebras.ai/v1';\n\n try {\n const response = await fetch(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(buildChatParams(request)),\n signal: request.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorMessage = `Cerebras API error: ${response.status}`;\n try {\n const errorJson = JSON.parse(errorText) as {\n error?: { message?: string };\n message?: string;\n };\n errorMessage = errorJson.error?.message || errorJson.message || errorMessage;\n } catch {\n errorMessage = errorText || errorMessage;\n }\n\n throw this.toHttpProviderError(errorMessage, response.status, response.headers);\n }\n\n const data = await response.json();\n return transformChatResponse(data);\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n const self = this;\n const apiKey = this.config.apiKey;\n const baseUrl = this.config.baseUrl || 'https://api.cerebras.ai/v1';\n\n try {\n const response = await fetch(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n ...buildChatParams(request),\n stream: true,\n stream_options: { include_usage: true },\n }),\n signal: request.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorMessage = `Cerebras API error: ${response.status}`;\n try {\n const errorJson = JSON.parse(errorText) as {\n error?: { message?: string };\n message?: string;\n };\n errorMessage = errorJson.error?.message || errorJson.message || errorMessage;\n } catch {\n errorMessage = errorText || errorMessage;\n }\n\n throw this.toHttpProviderError(errorMessage, response.status, response.headers);\n }\n\n return {\n async *[Symbol.asyncIterator]() {\n const state = createChatStreamState(request.model);\n\n try {\n for await (const chunk of parseChatSSEStream(response, state)) {\n yield chunk;\n }\n } catch (error) {\n const providerError = self.toProviderError(error);\n yield createChatErrorChunk(providerError.message, providerError.code);\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) {\n return error;\n }\n\n if (error instanceof Error) {\n const anyError = error as Error & {\n status?: number;\n statusCode?: number;\n headers?: Record<string, string>;\n code?: string;\n };\n\n const status = anyError.status || anyError.statusCode;\n const retryAfter = anyError.headers?.['retry-after']\n ? parseInt(anyError.headers['retry-after'], 10)\n : undefined;\n\n if (status === 429) {\n return new ProviderError(error.message, 'rate_limit', status, retryAfter);\n }\n if (status === 401 || status === 403) {\n return new ProviderError(error.message, 'auth_error', status);\n }\n if (status === 400) {\n return new ProviderError(error.message, 'invalid_request', status);\n }\n if (status && status >= 500) {\n return new ProviderError(error.message, 'server_error', status);\n }\n if (error.name === 'AbortError' || anyError.code === 'ETIMEDOUT') {\n return new ProviderError(error.message, 'timeout');\n }\n\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n\n private toHttpProviderError(\n message: string,\n status: number,\n headers?: Headers\n ): ProviderError {\n const retryAfterHeader = headers?.get('retry-after');\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n\n if (status === 429) {\n return new ProviderError(message, 'rate_limit', status, retryAfter);\n }\n if (status === 401 || status === 403) {\n return new ProviderError(message, 'auth_error', status);\n }\n if (status === 400) {\n return new ProviderError(message, 'invalid_request', status);\n }\n if (status >= 500) {\n return new ProviderError(message, 'server_error', status);\n }\n\n return new ProviderError(message, 'unknown', status);\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n const params = buildChatParams(request);\n\n return {\n body: truncateChatBase64(params as Record<string, unknown>),\n messagesPath: 'messages',\n metadata: {\n endpoint: 'POST /v1/chat/completions',\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n };\n }\n}\n","import type {\n ProviderRequest,\n ProviderResponse,\n ProviderMessage,\n ProviderTool,\n ProviderToolCallPart,\n ProviderFinishReason,\n ProviderUsage,\n ProviderStreamChunk,\n ContentPart,\n ProviderReasoningDetail,\n} from '@standardagents/spec';\nimport { calculateCerebrasUsageCost } from './pricing';\n\nexport type CerebrasChatContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: { url: string; detail?: 'auto' | 'low' | 'high' } };\n\nexport type CerebrasChatMessage =\n | { role: 'system'; content: string }\n | { role: 'user'; content: string | CerebrasChatContentPart[] }\n | {\n role: 'assistant';\n content?: string | null;\n tool_calls?: CerebrasChatToolCall[];\n reasoning?: string | null;\n }\n | { role: 'tool'; tool_call_id: string; content: string };\n\nexport interface CerebrasChatToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface CerebrasChatTool {\n type: 'function';\n function: {\n name: string;\n description?: string;\n parameters?: Record<string, unknown>;\n strict?: boolean;\n };\n}\n\nexport type CerebrasChatToolChoice =\n | 'auto'\n | 'none'\n | 'required'\n | { type: 'function'; function: { name: string } };\n\nexport interface CerebrasChatCompletionRequest {\n model: string;\n messages: CerebrasChatMessage[];\n tools?: CerebrasChatTool[];\n tool_choice?: CerebrasChatToolChoice;\n parallel_tool_calls?: boolean;\n max_completion_tokens?: number;\n temperature?: number;\n top_p?: number;\n stop?: string[];\n stream?: boolean;\n stream_options?: { include_usage?: boolean };\n reasoning_effort?: 'none' | 'low' | 'medium' | 'high';\n clear_thinking?: boolean;\n logprobs?: boolean;\n top_logprobs?: number;\n seed?: number;\n user?: string;\n service_tier?: 'priority' | 'default' | 'auto' | 'flex';\n response_format?:\n | { type: 'json_object' }\n | { type: 'json_schema'; json_schema: { name: string; schema: Record<string, unknown>; strict?: boolean } };\n [key: string]: unknown;\n}\n\nexport interface CerebrasChatCompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n completion_tokens_details?: {\n reasoning_tokens?: number;\n accepted_prediction_tokens?: number;\n rejected_prediction_tokens?: number;\n };\n}\n\nexport interface CerebrasChatCompletionResponse {\n id: string;\n model?: string;\n service_tier_used?: string;\n system_fingerprint?: string;\n time_info?: Record<string, unknown>;\n choices: Array<{\n index: number;\n message: {\n role: 'assistant';\n content: string | null;\n reasoning?: string | null;\n tool_calls?: CerebrasChatToolCall[];\n };\n finish_reason: string;\n }>;\n usage?: CerebrasChatCompletionUsage;\n}\n\nexport interface CerebrasChatStreamChunk {\n id?: string;\n model?: string;\n choices?: Array<{\n index: number;\n delta: {\n role?: string;\n content?: string | null;\n reasoning?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string | null;\n }>;\n usage?: CerebrasChatCompletionUsage;\n}\n\nexport function transformChatContentPart(part: ContentPart): CerebrasChatContentPart {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n\n if (part.type === 'image') {\n const data = part.data || '';\n const imageUrl = data.startsWith('data:')\n ? data\n : `data:${part.mediaType || 'image/png'};base64,${data}`;\n\n return {\n type: 'image_url',\n image_url: {\n url: imageUrl,\n detail: part.detail || 'auto',\n },\n };\n }\n\n if (part.type === 'image_url') {\n return {\n type: 'image_url',\n image_url: {\n url: part.image_url?.url || '',\n detail: part.image_url?.detail || 'auto',\n },\n };\n }\n\n return {\n type: 'text',\n text: `[File: ${part.filename || 'file'}]`,\n };\n}\n\nexport function transformChatMessageContent(\n content: string | ContentPart[]\n): string | CerebrasChatContentPart[] {\n if (typeof content === 'string') {\n return content;\n }\n return content.map(transformChatContentPart);\n}\n\nexport function transformChatSystemMessage(\n msg: ProviderMessage & { role: 'system' }\n): CerebrasChatMessage {\n return {\n role: 'system',\n content: msg.content,\n };\n}\n\nexport function transformChatUserMessage(\n msg: ProviderMessage & { role: 'user' }\n): CerebrasChatMessage {\n return {\n role: 'user',\n content: transformChatMessageContent(msg.content),\n };\n}\n\nexport function transformChatAssistantMessage(\n msg: ProviderMessage & { role: 'assistant' }\n): CerebrasChatMessage {\n const message: CerebrasChatMessage & { role: 'assistant' } = {\n role: 'assistant',\n content: msg.content || null,\n };\n\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n message.tool_calls = msg.toolCalls.map((tc) => ({\n id: tc.id,\n type: 'function',\n function: {\n name: tc.name,\n arguments: typeof tc.arguments === 'string'\n ? tc.arguments\n : JSON.stringify(tc.arguments),\n },\n }));\n }\n\n if (msg.reasoning) {\n message.reasoning = msg.reasoning;\n }\n\n return message;\n}\n\nexport type CerebrasChatToolMessageResult = {\n toolMessage: CerebrasChatMessage & { role: 'tool' };\n syntheticUserMessage?: CerebrasChatMessage & { role: 'user' };\n};\n\nexport function transformChatToolMessage(\n msg: ProviderMessage & { role: 'tool' }\n): CerebrasChatToolMessageResult {\n let output: string;\n\n if (typeof msg.content === 'string') {\n output = msg.content;\n } else if ('type' in msg.content) {\n if (msg.content.type === 'text') {\n output = msg.content.text;\n } else if (msg.content.type === 'error') {\n output = `Error: ${msg.content.error}`;\n } else {\n output = JSON.stringify(msg.content);\n }\n } else {\n output = JSON.stringify(msg.content);\n }\n\n const imageAttachments = msg.attachments?.filter(a => a.type === 'image' && a.data) || [];\n const toolMessage: CerebrasChatMessage & { role: 'tool' } = {\n role: 'tool',\n tool_call_id: msg.toolCallId,\n content: output || (imageAttachments.length > 0 ? 'Success' : ''),\n };\n\n if (imageAttachments.length === 0) {\n return { toolMessage };\n }\n\n const imageContent: CerebrasChatContentPart[] = [];\n const toolName = msg.toolName || 'the tool';\n const isSingle = imageAttachments.length === 1;\n const descriptor = isSingle ? 'the file' : `${imageAttachments.length} files`;\n const verb = isSingle ? 'is' : 'are';\n\n imageContent.push({\n type: 'text',\n text: `Here ${verb} ${descriptor} from ${toolName}:`,\n });\n\n for (const attachment of imageAttachments) {\n const attachmentData = attachment.data || '';\n const imageData = attachmentData.startsWith('data:')\n ? attachmentData\n : `data:${attachment.mediaType || 'image/png'};base64,${attachmentData}`;\n\n imageContent.push({\n type: 'image_url',\n image_url: {\n url: imageData,\n detail: 'auto',\n },\n });\n }\n\n return {\n toolMessage,\n syntheticUserMessage: {\n role: 'user',\n content: imageContent,\n },\n };\n}\n\nexport function transformChatMessages(messages: ProviderMessage[]): CerebrasChatMessage[] {\n const result: CerebrasChatMessage[] = [];\n\n for (const msg of messages) {\n switch (msg.role) {\n case 'system':\n result.push(transformChatSystemMessage(msg));\n break;\n case 'user':\n result.push(transformChatUserMessage(msg));\n break;\n case 'assistant':\n result.push(transformChatAssistantMessage(msg));\n break;\n case 'tool': {\n const { toolMessage, syntheticUserMessage } = transformChatToolMessage(msg);\n result.push(toolMessage);\n if (syntheticUserMessage) {\n result.push(syntheticUserMessage);\n }\n break;\n }\n }\n }\n\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * JSON Schema validation / annotation keywords Cerebras's strict function-calling\n * parser rejects — e.g. `Invalid fields for schema with types ['string']:\n * {'minLength'}`. Zod → JSON Schema emits these freely, so we strip them before\n * sending. Semantic keywords the model actually relies on — type, enum, const,\n * description, properties, items, anyOf, $ref — are kept.\n */\nconst STRICT_UNSUPPORTED_KEYWORDS = new Set<string>([\n // strings\n 'minLength', 'maxLength', 'pattern', 'format',\n // numbers / integers\n 'minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum', 'multipleOf',\n // arrays\n 'minItems', 'maxItems', 'uniqueItems', 'minContains', 'maxContains',\n // objects\n 'minProperties', 'maxProperties', 'patternProperties', 'propertyNames',\n 'dependentRequired', 'dependentSchemas', 'unevaluatedProperties',\n // annotations strict parsers reject\n 'default', 'examples', '$schema', '$comment', 'contentEncoding', 'contentMediaType',\n]);\n\n/**\n * Make a JSON Schema valid for STRICT function calling, recursively.\n *\n * Cerebras's strict tool path (like OpenAI's) requires every object property to\n * appear in `required` and `additionalProperties: false`. When a schema with\n * OPTIONAL properties is sent with `strict: true`, Cerebras silently disables\n * native tool parsing and the model emits the call as plain text into `content`\n * instead — so the call never reaches `tool_calls`. Listing every property as\n * required satisfies the strict parser; Standard Agents still validates the\n * actual call against the original Zod schema afterward, so genuinely-optional\n * arguments stay optional in practice.\n *\n * It also drops keywords the strict parser rejects (see\n * STRICT_UNSUPPORTED_KEYWORDS), which zod → JSON Schema emits by default.\n */\nfunction normalizeStrictJsonSchema(schema: unknown): unknown {\n if (Array.isArray(schema)) {\n return schema.map((item) => normalizeStrictJsonSchema(item));\n }\n if (!isRecord(schema)) {\n return schema;\n }\n\n const normalized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(schema)) {\n // Strip keywords Cerebras's strict schema parser rejects (e.g. minLength).\n if (STRICT_UNSUPPORTED_KEYWORDS.has(key)) continue;\n\n if (key === 'properties' && isRecord(value)) {\n // Keys here are PROPERTY NAMES (data), not schema keywords — normalize each\n // property's subschema, but never treat a property name as a keyword to strip.\n const props: Record<string, unknown> = {};\n for (const [propName, propSchema] of Object.entries(value)) {\n props[propName] = normalizeStrictJsonSchema(propSchema);\n }\n normalized[key] = props;\n } else if (key === 'enum' || key === 'const') {\n // Allowed values are DATA, not subschemas — copy verbatim so an object-typed\n // member isn't mistaken for a nested schema and rewritten.\n normalized[key] = value;\n } else {\n normalized[key] = normalizeStrictJsonSchema(value);\n }\n }\n\n const properties = isRecord(normalized.properties) ? normalized.properties : undefined;\n const type = normalized.type;\n const isObjectSchema =\n type === 'object' || (Array.isArray(type) && type.includes('object')) || !!properties;\n\n if (isObjectSchema) {\n if (normalized.type === undefined) {\n normalized.type = 'object';\n }\n normalized.properties = properties || {};\n normalized.required = Object.keys(normalized.properties as Record<string, unknown>);\n normalized.additionalProperties = false;\n }\n\n return normalized;\n}\n\nfunction normalizeStrictToolParameters(\n parameters?: Record<string, unknown> | null\n): Record<string, unknown> {\n const base = isRecord(parameters) ? { ...parameters } : {};\n if (base.type === undefined) base.type = 'object';\n if (base.properties === undefined) base.properties = {};\n return normalizeStrictJsonSchema(base) as Record<string, unknown>;\n}\n\nexport function transformChatTool(tool: ProviderTool): CerebrasChatTool {\n const inputParams = tool.function.parameters as Record<string, unknown> | null | undefined;\n\n return {\n type: 'function',\n function: {\n name: tool.function.name,\n description: tool.function.description || undefined,\n parameters: normalizeStrictToolParameters(inputParams),\n strict: true,\n },\n };\n}\n\nexport function transformChatTools(tools: ProviderTool[]): CerebrasChatTool[] {\n return tools.map(transformChatTool);\n}\n\nexport function transformChatToolChoice(\n choice: ProviderRequest['toolChoice']\n): CerebrasChatToolChoice | undefined {\n if (choice === 'auto') return 'auto';\n if (choice === 'none') return 'none';\n if (choice === 'required') return 'required';\n if (typeof choice === 'object' && 'name' in choice) {\n return { type: 'function', function: { name: choice.name } };\n }\n return undefined;\n}\n\nexport function mapChatFinishReason(finishReason: string | null | undefined): ProviderFinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'tool_calls':\n return 'tool_calls';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content_filter';\n case 'error':\n return 'error';\n default:\n return 'stop';\n }\n}\n\nexport function extractChatToolCalls(\n toolCalls: CerebrasChatToolCall[] | undefined\n): ProviderToolCallPart[] | undefined {\n if (!toolCalls || toolCalls.length === 0) {\n return undefined;\n }\n\n return toolCalls.map((tc) => {\n let parsedArgs: Record<string, unknown> = {};\n try {\n parsedArgs = tc.function.arguments ? JSON.parse(tc.function.arguments) : {};\n } catch {\n parsedArgs = {};\n }\n\n return {\n id: tc.id,\n name: tc.function.name,\n arguments: parsedArgs,\n };\n });\n}\n\nexport function transformChatUsage(\n usage: CerebrasChatCompletionUsage | null | undefined,\n modelId?: string | null\n): ProviderUsage {\n if (!usage) {\n return {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n }\n\n const mapped: ProviderUsage = {\n promptTokens: usage.prompt_tokens || 0,\n completionTokens: usage.completion_tokens || 0,\n totalTokens: usage.total_tokens || 0,\n reasoningTokens: usage.completion_tokens_details?.reasoning_tokens,\n cachedTokens: usage.prompt_tokens_details?.cached_tokens,\n };\n\n const cost = calculateCerebrasUsageCost(modelId, mapped);\n if (cost !== undefined) {\n mapped.cost = cost;\n }\n\n return mapped;\n}\n\nexport function transformChatResponse(response: CerebrasChatCompletionResponse): ProviderResponse {\n const choice = response.choices?.[0];\n const message = choice?.message;\n const reasoning = message?.reasoning || null;\n\n return {\n content: message?.content || null,\n reasoning,\n reasoningDetails: reasoning ? [{ type: 'text', text: reasoning }] : undefined,\n toolCalls: extractChatToolCalls(message?.tool_calls),\n finishReason: mapChatFinishReason(choice?.finish_reason),\n usage: transformChatUsage(response.usage, response.model),\n metadata: {\n model: response.model,\n provider: 'cerebras',\n requestId: response.id,\n serviceTierUsed: response.service_tier_used,\n systemFingerprint: response.system_fingerprint,\n timeInfo: response.time_info,\n },\n };\n}\n\nexport interface CerebrasChatStreamState {\n model?: string;\n content: string;\n toolCalls: Map<number, { id: string; name: string; arguments: string }>;\n reasoningContent: string;\n hasContent: boolean;\n hasReasoning: boolean;\n finishReason: string | null;\n}\n\nexport function createChatStreamState(model?: string): CerebrasChatStreamState {\n return {\n model,\n content: '',\n toolCalls: new Map(),\n reasoningContent: '',\n hasContent: false,\n hasReasoning: false,\n finishReason: null,\n };\n}\n\nexport function processChatStreamChunk(\n chunk: CerebrasChatStreamChunk,\n state: CerebrasChatStreamState\n): ProviderStreamChunk[] {\n const chunks: ProviderStreamChunk[] = [];\n const choice = chunk.choices?.[0];\n const delta = choice?.delta;\n\n if (!delta && !choice?.finish_reason && !chunk.usage) {\n return chunks;\n }\n\n if (delta?.content) {\n state.hasContent = true;\n state.content += delta.content;\n chunks.push({ type: 'content-delta', delta: delta.content });\n }\n\n if (delta?.reasoning) {\n state.hasReasoning = true;\n state.reasoningContent += delta.reasoning;\n chunks.push({ type: 'reasoning-delta', delta: delta.reasoning });\n }\n\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n const existing = state.toolCalls.get(tc.index);\n\n if (tc.id && tc.function?.name) {\n state.toolCalls.set(tc.index, {\n id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments || '',\n });\n chunks.push({\n type: 'tool-call-start',\n id: tc.id,\n name: tc.function.name,\n });\n } else if (existing && tc.function?.arguments) {\n existing.arguments += tc.function.arguments;\n chunks.push({\n type: 'tool-call-delta',\n id: existing.id,\n argumentsDelta: tc.function.arguments,\n });\n }\n }\n }\n\n if (choice?.finish_reason) {\n state.finishReason = choice.finish_reason;\n\n if (state.hasContent) {\n chunks.push({ type: 'content-done' });\n }\n\n if (state.hasReasoning) {\n chunks.push({ type: 'reasoning-done' });\n }\n\n for (const tc of state.toolCalls.values()) {\n let parsedArgs: Record<string, unknown> = {};\n try {\n parsedArgs = tc.arguments ? JSON.parse(tc.arguments) : {};\n } catch {\n parsedArgs = {};\n }\n\n chunks.push({\n type: 'tool-call-done',\n id: tc.id,\n arguments: parsedArgs,\n });\n }\n }\n\n if (chunk.usage) {\n const reasoningDetails: ProviderReasoningDetail[] | undefined = state.reasoningContent\n ? [{ type: 'text', text: state.reasoningContent }]\n : undefined;\n\n chunks.push({\n type: 'finish',\n finishReason: mapChatFinishReason(state.finishReason),\n usage: transformChatUsage(chunk.usage, chunk.model || state.model),\n reasoningDetails,\n });\n }\n\n return chunks;\n}\n\nexport function parseChatStreamEvent(jsonStr: string): CerebrasChatStreamChunk | null {\n try {\n return JSON.parse(jsonStr) as CerebrasChatStreamChunk;\n } catch {\n return null;\n }\n}\n\nexport async function* parseChatSSEStream(\n response: Response,\n state: CerebrasChatStreamState\n): AsyncIterable<ProviderStreamChunk> {\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (!trimmed.startsWith('data: ')) continue;\n\n const data = trimmed.slice(6);\n if (data === '[DONE]') continue;\n\n const chunk = parseChatStreamEvent(data);\n if (!chunk) continue;\n\n for (const providerChunk of processChatStreamChunk(chunk, state)) {\n yield providerChunk;\n }\n }\n }\n\n if (buffer.trim()) {\n const trimmed = buffer.trim();\n if (trimmed.startsWith('data: ')) {\n const data = trimmed.slice(6);\n if (data !== '[DONE]') {\n const chunk = parseChatStreamEvent(data);\n if (chunk) {\n for (const providerChunk of processChatStreamChunk(chunk, state)) {\n yield providerChunk;\n }\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction mapCerebrasReasoningEffort(\n model: string,\n level: number\n): 'none' | 'low' | 'medium' | 'high' | undefined {\n if (model.startsWith('gpt-oss-')) {\n if (level >= 100) return 'high';\n if (level >= 66) return 'medium';\n if (level >= 33) return 'low';\n if (level > 0) return 'low';\n return undefined;\n }\n\n if (model.startsWith('zai-glm-4.7')) {\n return level === 0 ? 'none' : undefined;\n }\n\n return undefined;\n}\n\nexport function buildChatParams(request: ProviderRequest): CerebrasChatCompletionRequest {\n const params: CerebrasChatCompletionRequest = {\n model: request.model,\n messages: transformChatMessages(request.messages),\n };\n\n if (request.tools && request.tools.length > 0) {\n params.tools = transformChatTools(request.tools);\n\n const toolChoice = transformChatToolChoice(request.toolChoice);\n if (toolChoice !== undefined) {\n params.tool_choice = toolChoice;\n }\n\n if (request.parallelToolCalls !== undefined) {\n params.parallel_tool_calls = request.parallelToolCalls;\n }\n }\n\n if (request.maxOutputTokens !== undefined) {\n params.max_completion_tokens = request.maxOutputTokens;\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.topP !== undefined) {\n params.top_p = request.topP;\n }\n\n if (request.stopSequences && request.stopSequences.length > 0) {\n params.stop = request.stopSequences;\n }\n\n if (request.reasoning?.level !== undefined) {\n const effort = mapCerebrasReasoningEffort(request.model, request.reasoning.level);\n if (effort) {\n params.reasoning_effort = effort;\n }\n }\n\n if (request.responseFormat?.type === 'json') {\n if (request.responseFormat.schema) {\n params.response_format = {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n schema: request.responseFormat.schema,\n strict: true,\n },\n };\n } else {\n params.response_format = { type: 'json_object' };\n }\n }\n\n if (request.providerOptions) {\n const { _metadata, ...safeOptions } = request.providerOptions as Record<string, unknown> & {\n _metadata?: unknown;\n };\n Object.assign(params, safeOptions);\n }\n\n return params;\n}\n\nexport function createChatErrorChunk(error: string, code?: string): ProviderStreamChunk {\n return { type: 'error', error, code };\n}\n\nfunction isBase64Like(str: string): boolean {\n if (str.startsWith('data:')) return true;\n if (str.length > 200) {\n const base64Pattern = /^[A-Za-z0-9+/]+=*$/;\n return base64Pattern.test(str.substring(0, 200));\n }\n return false;\n}\n\nfunction truncateBase64String(str: string, maxLength: number = 50): string {\n if (str.length <= maxLength) return str;\n const preview = str.substring(0, maxLength);\n return `${preview}...[truncated, ${str.length.toLocaleString()} chars]`;\n}\n\nexport function truncateChatBase64<T>(obj: T, maxLength: number = 50): T {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === 'string') {\n return (isBase64Like(obj) ? truncateBase64String(obj, maxLength) : obj) as T;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => truncateChatBase64(item, maxLength)) as T;\n }\n\n if (typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = truncateChatBase64(value, maxLength);\n }\n return result as T;\n }\n\n return obj;\n}\n","import META_ICON_FILE from './vendor-icons/meta.svg';\nimport OPENAI_ICON_FILE from './vendor-icons/openai.svg';\nimport QWEN_ICON_FILE from './vendor-icons/qwen.svg';\nimport ZAI_ORG_ICON_FILE from './vendor-icons/zai-org.svg';\n\nconst CEREBRAS_ICON = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" fill=\"none\">\n <defs>\n <linearGradient id=\"cerebras-gradient\" x1=\"12\" y1=\"10\" x2=\"52\" y2=\"54\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#F97316\" />\n <stop offset=\"1\" stop-color=\"#EA580C\" />\n </linearGradient>\n </defs>\n <rect width=\"64\" height=\"64\" rx=\"16\" fill=\"#111827\" />\n <path\n d=\"M43.5 20.5C40.8 17.8 36.7 16 32 16C23.2 16 16 23.2 16 32C16 40.8 23.2 48 32 48C36.7 48 40.8 46.2 43.5 43.5\"\n stroke=\"url(#cerebras-gradient)\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M46.5 24.5L33.5 37.5L27.5 31.5\"\n stroke=\"url(#cerebras-gradient)\"\n stroke-width=\"5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n</svg>\n`;\n\nconst META_ICON = META_ICON_FILE;\nconst ALIBABA_ICON = QWEN_ICON_FILE;\nconst ZAI_ICON = ZAI_ORG_ICON_FILE;\nconst OPENAI_ICON = OPENAI_ICON_FILE;\n\nconst MODEL_ICON_PREFIXES: Array<{ prefix: string; icon: string }> = [\n { prefix: 'llama', icon: META_ICON },\n { prefix: 'gpt', icon: OPENAI_ICON },\n { prefix: 'zai', icon: ZAI_ICON },\n { prefix: 'qwen', icon: ALIBABA_ICON },\n];\n\nexport function svgToDataUri(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n}\n\nfunction normalizeIcon(icon: string): string {\n if (icon.startsWith('data:') || icon.endsWith('.svg') || icon.includes('.svg?')) {\n return icon;\n }\n return svgToDataUri(icon);\n}\n\nexport function getCerebrasIconDataUri(): string {\n return svgToDataUri(CEREBRAS_ICON);\n}\n\nexport function getCerebrasModelIconDataUri(modelId?: string): string | undefined {\n if (!modelId) return undefined;\n const normalizedModelId = modelId.trim().toLowerCase();\n const icon = MODEL_ICON_PREFIXES.find(({ prefix }) => normalizedModelId.startsWith(prefix))?.icon;\n return icon ? normalizeIcon(icon) : undefined;\n}\n","import { z } from 'zod';\n\n/**\n * Cerebras provider options schema.\n *\n * The provider uses Cerebras' Chat Completions API directly. The schema\n * covers the common documented parameters and remains passthrough for\n * forward compatibility with new API fields.\n */\nexport const cerebrasProviderOptions = z.object({\n /**\n * Clear reasoning from prior turns.\n * Supported on `zai-glm-4.7`.\n */\n clear_thinking: z.boolean().optional(),\n\n /** Return token log probabilities. */\n logprobs: z.boolean().optional(),\n\n /** Number of top logprobs to return when `logprobs` is enabled. */\n top_logprobs: z.number().int().min(0).max(20).optional(),\n\n /** Sampling seed for best-effort determinism. */\n seed: z.number().int().optional(),\n\n /** End-user identifier for abuse monitoring. */\n user: z.string().optional(),\n\n /**\n * Request prioritization.\n * `priority` and some other tiers may require dedicated/private access.\n */\n service_tier: z.enum(['priority', 'default', 'auto', 'flex']).optional(),\n\n /**\n * Override the model's reasoning behavior directly.\n * The provider also maps Standard Agents `reasoning.level` automatically.\n */\n reasoning_effort: z.enum(['none', 'low', 'medium', 'high']).optional(),\n}).passthrough();\n\nexport type CerebrasProviderOptions = z.infer<typeof cerebrasProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { CerebrasProvider } from './CerebrasProvider';\nimport { cerebrasProviderOptions } from './providerOptions';\n\n/**\n * Cerebras provider factory for Standard Agents.\n *\n * Uses Cerebras' OpenAI-compatible Chat Completions API with typed\n * providerOptions for Cerebras-specific request parameters.\n */\nexport const cerebras: ProviderFactoryWithOptions<typeof cerebrasProviderOptions> =\n Object.assign(\n (config: ProviderFactoryConfig) => new CerebrasProvider(config),\n { providerOptions: cerebrasProviderOptions }\n );\n\nexport { cerebrasProviderOptions, type CerebrasProviderOptions } from './providerOptions';\nexport { CerebrasProvider } from './CerebrasProvider';\nexport {\n calculateCerebrasUsageCost,\n getCerebrasModelPricing,\n type CerebrasModelPricing,\n} from './pricing';\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CerebrasModelPricing, calculateCerebrasUsageCost, getCerebrasModelPricing } from '@standardagents/provider-pricing';
|
package/dist/pricing.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@standardagents/cerebras",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
".": {
|
|
15
15
|
"types": "./dist/index.d.ts",
|
|
16
16
|
"import": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./pricing": {
|
|
19
|
+
"types": "./dist/pricing.d.ts",
|
|
20
|
+
"import": "./dist/pricing.js"
|
|
17
21
|
}
|
|
18
22
|
},
|
|
19
23
|
"files": [
|
|
@@ -21,15 +25,16 @@
|
|
|
21
25
|
"README.md"
|
|
22
26
|
],
|
|
23
27
|
"dependencies": {
|
|
24
|
-
"zod": "4.3.5"
|
|
28
|
+
"zod": "4.3.5",
|
|
29
|
+
"@standardagents/provider-pricing": "0.22.1"
|
|
25
30
|
},
|
|
26
31
|
"peerDependencies": {
|
|
27
|
-
"@standardagents/spec": "^0.
|
|
32
|
+
"@standardagents/spec": "^0.22.1"
|
|
28
33
|
},
|
|
29
34
|
"devDependencies": {
|
|
30
35
|
"tsup": "^8.3.5",
|
|
31
36
|
"typescript": "^5.9.0",
|
|
32
|
-
"@standardagents/spec": "0.
|
|
37
|
+
"@standardagents/spec": "0.22.1"
|
|
33
38
|
},
|
|
34
39
|
"keywords": [
|
|
35
40
|
"standardagents",
|