@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 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,11 @@
1
+ // src/pricing.ts
2
+ import {
3
+ calculateCerebrasUsageCost,
4
+ getCerebrasModelPricing
5
+ } from "@standardagents/provider-pricing";
6
+
7
+ export {
8
+ calculateCerebrasUsageCost,
9
+ getCerebrasModelPricing
10
+ };
11
+ //# sourceMappingURL=chunk-NSNGOKA3.js.map
@@ -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
- return {
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":";AAUA,SAAS,qBAAqB;;;AC6HvB,SAAS,yBAAyB,MAA4C;AACnF,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,EACzC;AAEA,MAAI,KAAK,SAAS,SAAS;AACzB,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,WAAW,KAAK,WAAW,OAAO,IACpC,OACA,QAAQ,KAAK,aAAa,WAAW,WAAW,IAAI;AAExD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,QACT,KAAK;AAAA,QACL,QAAQ,KAAK,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,QACT,KAAK,KAAK,WAAW,OAAO;AAAA,QAC5B,QAAQ,KAAK,WAAW,UAAU;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,UAAU,KAAK,YAAY,MAAM;AAAA,EACzC;AACF;AAEO,SAAS,4BACd,SACoC;AACpC,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,IAAI,wBAAwB;AAC7C;AAEO,SAAS,2BACd,KACqB;AACrB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,IAAI;AAAA,EACf;AACF;AAEO,SAAS,yBACd,KACqB;AACrB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,4BAA4B,IAAI,OAAO;AAAA,EAClD;AACF;AAEO,SAAS,8BACd,KACqB;AACrB,QAAM,UAAuD;AAAA,IAC3D,MAAM;AAAA,IACN,SAAS,IAAI,WAAW;AAAA,EAC1B;AAEA,MAAI,IAAI,aAAa,IAAI,UAAU,SAAS,GAAG;AAC7C,YAAQ,aAAa,IAAI,UAAU,IAAI,CAAC,QAAQ;AAAA,MAC9C,IAAI,GAAG;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,QACR,MAAM,GAAG;AAAA,QACT,WAAW,OAAO,GAAG,cAAc,WAC/B,GAAG,YACH,KAAK,UAAU,GAAG,SAAS;AAAA,MACjC;AAAA,IACF,EAAE;AAAA,EACJ;AAEA,MAAI,IAAI,WAAW;AACjB,YAAQ,YAAY,IAAI;AAAA,EAC1B;AAEA,SAAO;AACT;AAOO,SAAS,yBACd,KAC+B;AAC/B,MAAI;AAEJ,MAAI,OAAO,IAAI,YAAY,UAAU;AACnC,aAAS,IAAI;AAAA,EACf,WAAW,UAAU,IAAI,SAAS;AAChC,QAAI,IAAI,QAAQ,SAAS,QAAQ;AAC/B,eAAS,IAAI,QAAQ;AAAA,IACvB,WAAW,IAAI,QAAQ,SAAS,SAAS;AACvC,eAAS,UAAU,IAAI,QAAQ,KAAK;AAAA,IACtC,OAAO;AACL,eAAS,KAAK,UAAU,IAAI,OAAO;AAAA,IACrC;AAAA,EACF,OAAO;AACL,aAAS,KAAK,UAAU,IAAI,OAAO;AAAA,EACrC;AAEA,QAAM,mBAAmB,IAAI,aAAa,OAAO,OAAK,EAAE,SAAS,WAAW,EAAE,IAAI,KAAK,CAAC;AACxF,QAAM,cAAsD;AAAA,IAC1D,MAAM;AAAA,IACN,cAAc,IAAI;AAAA,IAClB,SAAS,WAAW,iBAAiB,SAAS,IAAI,YAAY;AAAA,EAChE;AAEA,MAAI,iBAAiB,WAAW,GAAG;AACjC,WAAO,EAAE,YAAY;AAAA,EACvB;AAEA,QAAM,eAA0C,CAAC;AACjD,QAAM,WAAW,IAAI,YAAY;AACjC,QAAM,WAAW,iBAAiB,WAAW;AAC7C,QAAM,aAAa,WAAW,aAAa,GAAG,iBAAiB,MAAM;AACrE,QAAM,OAAO,WAAW,OAAO;AAE/B,eAAa,KAAK;AAAA,IAChB,MAAM;AAAA,IACN,MAAM,QAAQ,IAAI,IAAI,UAAU,SAAS,QAAQ;AAAA,EACnD,CAAC;AAED,aAAW,cAAc,kBAAkB;AACzC,UAAM,iBAAiB,WAAW,QAAQ;AAC1C,UAAM,YAAY,eAAe,WAAW,OAAO,IAC/C,iBACA,QAAQ,WAAW,aAAa,WAAW,WAAW,cAAc;AAExE,iBAAa,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,WAAW;AAAA,QACT,KAAK;AAAA,QACL,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA,sBAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB,UAAoD;AACxF,QAAM,SAAgC,CAAC;AAEvC,aAAW,OAAO,UAAU;AAC1B,YAAQ,IAAI,MAAM;AAAA,MAChB,KAAK;AACH,eAAO,KAAK,2BAA2B,GAAG,CAAC;AAC3C;AAAA,MACF,KAAK;AACH,eAAO,KAAK,yBAAyB,GAAG,CAAC;AACzC;AAAA,MACF,KAAK;AACH,eAAO,KAAK,8BAA8B,GAAG,CAAC;AAC9C;AAAA,MACF,KAAK,QAAQ;AACX,cAAM,EAAE,aAAa,qBAAqB,IAAI,yBAAyB,GAAG;AAC1E,eAAO,KAAK,WAAW;AACvB,YAAI,sBAAsB;AACxB,iBAAO,KAAK,oBAAoB;AAAA,QAClC;AACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,MAAsC;AACtE,QAAM,cAAc,KAAK,SAAS;AAElC,QAAM,aAAa,eAAe,OAAO,gBAAgB,WACrD;AAAA,IACE,GAAG;AAAA,IACH,sBAAsB;AAAA,EACxB,IACA;AAAA,IACE,MAAM;AAAA,IACN,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,IACX,sBAAsB;AAAA,EACxB;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,MACR,MAAM,KAAK,SAAS;AAAA,MACpB,aAAa,KAAK,SAAS,eAAe;AAAA,MAC1C;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,OAA2C;AAC5E,SAAO,MAAM,IAAI,iBAAiB;AACpC;AAEO,SAAS,wBACd,QACoC;AACpC,MAAI,WAAW,OAAQ,QAAO;AAC9B,MAAI,WAAW,OAAQ,QAAO;AAC9B,MAAI,WAAW,WAAY,QAAO;AAClC,MAAI,OAAO,WAAW,YAAY,UAAU,QAAQ;AAClD,WAAO,EAAE,MAAM,YAAY,UAAU,EAAE,MAAM,OAAO,KAAK,EAAE;AAAA,EAC7D;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,cAA+D;AACjG,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,qBACd,WACoC;AACpC,MAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AACxC,WAAO;AAAA,EACT;AAEA,SAAO,UAAU,IAAI,CAAC,OAAO;AAC3B,QAAI,aAAsC,CAAC;AAC3C,QAAI;AACF,mBAAa,GAAG,SAAS,YAAY,KAAK,MAAM,GAAG,SAAS,SAAS,IAAI,CAAC;AAAA,IAC5E,QAAQ;AACN,mBAAa,CAAC;AAAA,IAChB;AAEA,WAAO;AAAA,MACL,IAAI,GAAG;AAAA,MACP,MAAM,GAAG,SAAS;AAAA,MAClB,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AACH;AAEO,SAAS,mBACd,OACe;AACf,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,MACL,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,aAAa;AAAA,IACf;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,MAAM,iBAAiB;AAAA,IACrC,kBAAkB,MAAM,qBAAqB;AAAA,IAC7C,aAAa,MAAM,gBAAgB;AAAA,IACnC,iBAAiB,MAAM,2BAA2B;AAAA,IAClD,cAAc,MAAM,uBAAuB;AAAA,EAC7C;AACF;AAEO,SAAS,sBAAsB,UAA4D;AAChG,QAAM,SAAS,SAAS,UAAU,CAAC;AACnC,QAAM,UAAU,QAAQ;AACxB,QAAM,YAAY,SAAS,aAAa;AAExC,SAAO;AAAA,IACL,SAAS,SAAS,WAAW;AAAA,IAC7B;AAAA,IACA,kBAAkB,YAAY,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,CAAC,IAAI;AAAA,IACpE,WAAW,qBAAqB,SAAS,UAAU;AAAA,IACnD,cAAc,oBAAoB,QAAQ,aAAa;AAAA,IACvD,OAAO,mBAAmB,SAAS,KAAK;AAAA,IACxC,UAAU;AAAA,MACR,OAAO,SAAS;AAAA,MAChB,UAAU;AAAA,MACV,WAAW,SAAS;AAAA,MACpB,iBAAiB,SAAS;AAAA,MAC1B,mBAAmB,SAAS;AAAA,MAC5B,UAAU,SAAS;AAAA,IACrB;AAAA,EACF;AACF;AAWO,SAAS,wBAAiD;AAC/D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW,oBAAI,IAAI;AAAA,IACnB,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,uBACd,OACA,OACuB;AACvB,QAAM,SAAgC,CAAC;AACvC,QAAM,SAAS,MAAM,UAAU,CAAC;AAChC,QAAM,QAAQ,QAAQ;AAEtB,MAAI,CAAC,SAAS,CAAC,QAAQ,iBAAiB,CAAC,MAAM,OAAO;AACpD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS;AAClB,UAAM,aAAa;AACnB,UAAM,WAAW,MAAM;AACvB,WAAO,KAAK,EAAE,MAAM,iBAAiB,OAAO,MAAM,QAAQ,CAAC;AAAA,EAC7D;AAEA,MAAI,OAAO,WAAW;AACpB,UAAM,eAAe;AACrB,UAAM,oBAAoB,MAAM;AAChC,WAAO,KAAK,EAAE,MAAM,mBAAmB,OAAO,MAAM,UAAU,CAAC;AAAA,EACjE;AAEA,MAAI,OAAO,YAAY;AACrB,eAAW,MAAM,MAAM,YAAY;AACjC,YAAM,WAAW,MAAM,UAAU,IAAI,GAAG,KAAK;AAE7C,UAAI,GAAG,MAAM,GAAG,UAAU,MAAM;AAC9B,cAAM,UAAU,IAAI,GAAG,OAAO;AAAA,UAC5B,IAAI,GAAG;AAAA,UACP,MAAM,GAAG,SAAS;AAAA,UAClB,WAAW,GAAG,SAAS,aAAa;AAAA,QACtC,CAAC;AACD,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,IAAI,GAAG;AAAA,UACP,MAAM,GAAG,SAAS;AAAA,QACpB,CAAC;AAAA,MACH,WAAW,YAAY,GAAG,UAAU,WAAW;AAC7C,iBAAS,aAAa,GAAG,SAAS;AAClC,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,IAAI,SAAS;AAAA,UACb,gBAAgB,GAAG,SAAS;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,eAAe;AACzB,UAAM,eAAe,OAAO;AAE5B,QAAI,MAAM,YAAY;AACpB,aAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AAAA,IACtC;AAEA,QAAI,MAAM,cAAc;AACtB,aAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAAA,IACxC;AAEA,eAAW,MAAM,MAAM,UAAU,OAAO,GAAG;AACzC,UAAI,aAAsC,CAAC;AAC3C,UAAI;AACF,qBAAa,GAAG,YAAY,KAAK,MAAM,GAAG,SAAS,IAAI,CAAC;AAAA,MAC1D,QAAQ;AACN,qBAAa,CAAC;AAAA,MAChB;AAEA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,IAAI,GAAG;AAAA,QACP,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,MAAM,OAAO;AACf,UAAM,mBAA0D,MAAM,mBAClE,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,iBAAiB,CAAC,IAC/C;AAEJ,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,cAAc,oBAAoB,MAAM,YAAY;AAAA,MACpD,OAAO,mBAAmB,MAAM,KAAK;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,qBAAqB,SAAiD;AACpF,MAAI;AACF,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,gBAAuB,mBACrB,UACA,OACoC;AACpC,QAAM,SAAS,SAAS,MAAM,UAAU;AACxC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAEA,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AAEb,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AAEV,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAEhD,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,eAAS,MAAM,IAAI,KAAK;AAExB,iBAAW,QAAQ,OAAO;AACxB,cAAM,UAAU,KAAK,KAAK;AAC1B,YAAI,CAAC,WAAW,QAAQ,WAAW,GAAG,EAAG;AACzC,YAAI,CAAC,QAAQ,WAAW,QAAQ,EAAG;AAEnC,cAAM,OAAO,QAAQ,MAAM,CAAC;AAC5B,YAAI,SAAS,SAAU;AAEvB,cAAM,QAAQ,qBAAqB,IAAI;AACvC,YAAI,CAAC,MAAO;AAEZ,mBAAW,iBAAiB,uBAAuB,OAAO,KAAK,GAAG;AAChE,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,KAAK,GAAG;AACjB,YAAM,UAAU,OAAO,KAAK;AAC5B,UAAI,QAAQ,WAAW,QAAQ,GAAG;AAChC,cAAM,OAAO,QAAQ,MAAM,CAAC;AAC5B,YAAI,SAAS,UAAU;AACrB,gBAAM,QAAQ,qBAAqB,IAAI;AACvC,cAAI,OAAO;AACT,uBAAW,iBAAiB,uBAAuB,OAAO,KAAK,GAAG;AAChE,oBAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;AAEA,SAAS,2BACP,OACA,OACgD;AAChD,MAAI,MAAM,WAAW,UAAU,GAAG;AAChC,QAAI,SAAS,IAAK,QAAO;AACzB,QAAI,SAAS,GAAI,QAAO;AACxB,QAAI,SAAS,GAAI,QAAO;AACxB,QAAI,QAAQ,EAAG,QAAO;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW,aAAa,GAAG;AACnC,WAAO,UAAU,IAAI,SAAS;AAAA,EAChC;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,SAAyD;AACvF,QAAM,SAAwC;AAAA,IAC5C,OAAO,QAAQ;AAAA,IACf,UAAU,sBAAsB,QAAQ,QAAQ;AAAA,EAClD;AAEA,MAAI,QAAQ,SAAS,QAAQ,MAAM,SAAS,GAAG;AAC7C,WAAO,QAAQ,mBAAmB,QAAQ,KAAK;AAE/C,UAAM,aAAa,wBAAwB,QAAQ,UAAU;AAC7D,QAAI,eAAe,QAAW;AAC5B,aAAO,cAAc;AAAA,IACvB;AAEA,QAAI,QAAQ,sBAAsB,QAAW;AAC3C,aAAO,sBAAsB,QAAQ;AAAA,IACvC;AAAA,EACF;AAEA,MAAI,QAAQ,oBAAoB,QAAW;AACzC,WAAO,wBAAwB,QAAQ;AAAA,EACzC;AAEA,MAAI,QAAQ,gBAAgB,QAAW;AACrC,WAAO,cAAc,QAAQ;AAAA,EAC/B;AAEA,MAAI,QAAQ,SAAS,QAAW;AAC9B,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAEA,MAAI,QAAQ,iBAAiB,QAAQ,cAAc,SAAS,GAAG;AAC7D,WAAO,OAAO,QAAQ;AAAA,EACxB;AAEA,MAAI,QAAQ,WAAW,UAAU,QAAW;AAC1C,UAAM,SAAS,2BAA2B,QAAQ,OAAO,QAAQ,UAAU,KAAK;AAChF,QAAI,QAAQ;AACV,aAAO,mBAAmB;AAAA,IAC5B;AAAA,EACF;AAEA,MAAI,QAAQ,gBAAgB,SAAS,QAAQ;AAC3C,QAAI,QAAQ,eAAe,QAAQ;AACjC,aAAO,kBAAkB;AAAA,QACvB,MAAM;AAAA,QACN,aAAa;AAAA,UACX,MAAM;AAAA,UACN,QAAQ,QAAQ,eAAe;AAAA,UAC/B,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,kBAAkB,EAAE,MAAM,cAAc;AAAA,IACjD;AAAA,EACF;AAEA,MAAI,QAAQ,iBAAiB;AAC3B,UAAM,EAAE,WAAW,GAAG,YAAY,IAAI,QAAQ;AAG9C,WAAO,OAAO,QAAQ,WAAW;AAAA,EACnC;AAEA,SAAO;AACT;AAEO,SAAS,qBAAqB,OAAe,MAAoC;AACtF,SAAO,EAAE,MAAM,SAAS,OAAO,KAAK;AACtC;AAEA,SAAS,aAAa,KAAsB;AAC1C,MAAI,IAAI,WAAW,OAAO,EAAG,QAAO;AACpC,MAAI,IAAI,SAAS,KAAK;AACpB,UAAM,gBAAgB;AACtB,WAAO,cAAc,KAAK,IAAI,UAAU,GAAG,GAAG,CAAC;AAAA,EACjD;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,KAAa,YAAoB,IAAY;AACzE,MAAI,IAAI,UAAU,UAAW,QAAO;AACpC,QAAM,UAAU,IAAI,UAAU,GAAG,SAAS;AAC1C,SAAO,GAAG,OAAO,kBAAkB,IAAI,OAAO,eAAe,CAAC;AAChE;AAEO,SAAS,mBAAsB,KAAQ,YAAoB,IAAO;AACvE,MAAI,QAAQ,QAAQ,QAAQ,QAAW;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAQ,aAAa,GAAG,IAAI,qBAAqB,KAAK,SAAS,IAAI;AAAA,EACrE;AAEA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,CAAC,SAAS,mBAAmB,MAAM,SAAS,CAAC;AAAA,EAC9D;AAEA,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,SAAkC,CAAC;AACzC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,aAAO,GAAG,IAAI,mBAAmB,OAAO,SAAS;AAAA,IACnD;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;A;;;;;;;;;;;;;;AC9uBA,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBtB,IAAM,YAAY;AAClB,IAAM,eAAe;AACrB,IAAM,WAAW;AACjB,IAAM,cAAc;AAEpB,IAAM,sBAA+D;AAAA,EACnE,EAAE,QAAQ,SAAS,MAAM,UAAU;AAAA,EACnC,EAAE,QAAQ,OAAO,MAAM,YAAY;AAAA,EACnC,EAAE,QAAQ,OAAO,MAAM,SAAS;AAAA,EAChC,EAAE,QAAQ,QAAQ,MAAM,aAAa;AACvC;AAEO,SAAS,aAAa,KAAqB;AAChD,SAAO,oCAAoC,mBAAmB,GAAG,CAAC;AACpE;AAEA,SAAS,cAAc,MAAsB;AAC3C,MAAI,KAAK,WAAW,OAAO,KAAK,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,OAAO,GAAG;AAC/E,WAAO;AAAA,EACT;AACA,SAAO,aAAa,IAAI;AAC1B;AAEO,SAAS,yBAAiC;AAC/C,SAAO,aAAa,aAAa;AACnC;AAEO,SAAS,4BAA4B,SAAsC;AAChF,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,oBAAoB,QAAQ,KAAK,EAAE,YAAY;AACrD,QAAM,OAAO,oBAAoB,KAAK,CAAC,EAAE,OAAO,MAAM,kBAAkB,WAAW,MAAM,CAAC,GAAG;AAC7F,SAAO,OAAO,cAAc,IAAI,IAAI;AACtC;;;AFpBA,IAAM,gBAED;AAAA,EACH;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,kBAAkB,CAAC,MAAM;AAAA,IACzB,mBAAmB,CAAC,MAAM;AAAA,IAC1B,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,oBAAoB,CAAC,SAAS,aAAa,oBAAoB;AAAA,EACjE;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,kBAAkB,CAAC,MAAM;AAAA,IACzB,mBAAmB,CAAC,MAAM;AAAA,IAC1B,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,oBAAoB,CAAC,SAAS,aAAa,oBAAoB;AAAA,EACjE;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,kBAAkB,CAAC,MAAM;AAAA,IACzB,mBAAmB,CAAC,MAAM;AAAA,IAC1B,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,oBAAoB,CAAC,SAAS,aAAa,oBAAoB;AAAA,IAC/D,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,iBAAiB,EAAE,GAAG,MAAM,IAAI,OAAO,IAAI,UAAU,KAAK,OAAO;AAAA,IACnE;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,kBAAkB,CAAC,MAAM;AAAA,IACzB,mBAAmB,CAAC,MAAM;AAAA,IAC1B,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,oBAAoB,CAAC,SAAS,aAAa,oBAAoB;AAAA,IAC/D,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,iBAAiB,EAAE,GAAG,QAAQ,KAAK,KAAK;AAAA,IAC1C;AAAA,EACF;AACF;AAEO,IAAM,mBAAN,MAAM,kBAAqC;AAAA,EACvC,OAAO;AAAA,EACP,uBAAuB;AAAA,EAExB;AAAA,EAER,OAAe,cAAgD;AAAA,EAC/D,OAAe,kBAAkB;AAAA,EACjC,OAAwB,YAAY,IAAI,KAAK;AAAA,EAE7C,YAAY,QAA+B;AACzC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,cAAc,UAA2B;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAA0B;AAChC,WAAO,4BAA4B,OAAO,KAAK,uBAAuB;AAAA,EACxE;AAAA,EAEA,MAAc,uBAA2D;AACvE,UAAM,MAAM,KAAK,IAAI;AAErB,QACE,kBAAiB,eACjB,MAAM,kBAAiB,kBAAkB,kBAAiB,WAC1D;AACA,aAAO,kBAAiB;AAAA,IAC1B;AAEA,UAAM,WAAW,MAAM,MAAM,4DAA4D;AACzF,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,qCAAqC,SAAS,MAAM,EAAE;AAAA,IACxE;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,SAAS,oBAAI,IAAqC;AAExD,eAAW,SAAS,eAAe;AACjC,aAAO,IAAI,MAAM,IAAI,KAAK;AAAA,IAC5B;AAEA,eAAW,SAAS,KAAK,QAAQ,CAAC,GAAG;AACnC,aAAO,IAAI,MAAM,IAAI,EAAE,GAAG,OAAO,IAAI,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC;AAAA,IAC5D;AAEA,sBAAiB,cAAc,MAAM,KAAK,OAAO,OAAO,CAAC;AACzD,sBAAiB,kBAAkB;AAEnC,WAAO,kBAAiB;AAAA,EAC1B;AAAA,EAEQ,qBAAqB,OAAmD;AAC9E,UAAM,cAAc,cAAc,KAAK,CAAC,cAAc,UAAU,OAAO,MAAM,EAAE;AAC/E,QAAI,aAAa,cAAc;AAC7B,aAAO,EAAE,GAAG,YAAY,aAAa;AAAA,IACvC;AAEA,UAAM,WAAW,IAAI,IAAI,MAAM,sBAAsB,CAAC,CAAC;AACvD,UAAM,kBAAkB,IAAI,IAAI,MAAM,oBAAoB,CAAC,CAAC;AAE5D,WAAO;AAAA,MACL,gBAAgB,gBAAgB,IAAI,OAAO;AAAA,MAC3C,mBAAmB,SAAS,IAAI,OAAO;AAAA,MACvC,mBAAmB;AAAA,MACnB,kBAAkB,SAAS,IAAI,WAAW,KAAK,SAAS,IAAI,oBAAoB;AAAA,MAChF,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,MAAM;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,SAAoD;AAC7E,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,qBAAqB;AAC/C,YAAM,QAAQ,OAAO,KAAK,CAAC,cAAc,UAAU,OAAO,OAAO;AACjE,UAAI,CAAC,MAAO,QAAO;AACnB,aAAO,KAAK,qBAAqB,KAAK;AAAA,IACxC,SAAS,OAAO;AACd,cAAQ,MAAM,mDAAmD,OAAO,KAAK,KAAK;AAClF,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,uBAAuB,OAAmD;AAChF,WAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,MAAM,MAAM,QAAQ,MAAM;AAAA,MAC1B,aAAa,MAAM;AAAA,MACnB,eAAe,MAAM;AAAA,MACrB,QAAQ,KAAK,QAAQ,MAAM,EAAE;AAAA,MAC7B,MAAM,MAAM,YAAY,QAAQ,MAAM;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,QAA+C;AAC7D,QAAI;AACF,UAAI,UAAU,MAAM,KAAK,qBAAqB,GAC3C,IAAI,CAAC,UAAU,KAAK,uBAAuB,KAAK,CAAC,EACjD,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAE9C,UAAI,QAAQ;AACV,cAAM,cAAc,OAAO,YAAY;AACvC,iBAAS,OAAO;AAAA,UACd,CAAC,UACC,MAAM,GAAG,YAAY,EAAE,SAAS,WAAW,KAC3C,MAAM,KAAK,YAAY,EAAE,SAAS,WAAW,KAC5C,MAAM,eAAe,MAAM,YAAY,YAAY,EAAE,SAAS,WAAW;AAAA,QAC9E;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAM,yCAAyC,KAAK;AAC5D,aAAO,cAAc,IAAI,CAAC,UAAU,KAAK,uBAAuB,KAAK,CAAC;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,SAAqD;AAClE,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,UAAU,KAAK,OAAO,WAAW;AAEvC,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,OAAO,qBAAqB;AAAA,QAC1D,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,iBAAiB,UAAU,MAAM;AAAA,QACnC;AAAA,QACA,MAAM,KAAK,UAAU,gBAAgB,OAAO,CAAC;AAAA,QAC7C,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,YAAY,MAAM,SAAS,KAAK;AACtC,YAAI,eAAe,uBAAuB,SAAS,MAAM;AACzD,YAAI;AACF,gBAAM,YAAY,KAAK,MAAM,SAAS;AAItC,yBAAe,UAAU,OAAO,WAAW,UAAU,WAAW;AAAA,QAClE,QAAQ;AACN,yBAAe,aAAa;AAAA,QAC9B;AAEA,cAAM,KAAK,oBAAoB,cAAc,SAAS,QAAQ,SAAS,OAAO;AAAA,MAChF;AAEA,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,aAAO,sBAAsB,IAAI;AAAA,IACnC,SAAS,OAAO;AACd,YAAM,KAAK,gBAAgB,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,SAAuE;AAClF,UAAM,OAAO;AACb,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,UAAU,KAAK,OAAO,WAAW;AAEvC,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,OAAO,qBAAqB;AAAA,QAC1D,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,iBAAiB,UAAU,MAAM;AAAA,QACnC;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,GAAG,gBAAgB,OAAO;AAAA,UAC1B,QAAQ;AAAA,UACR,gBAAgB,EAAE,eAAe,KAAK;AAAA,QACxC,CAAC;AAAA,QACD,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,YAAY,MAAM,SAAS,KAAK;AACtC,YAAI,eAAe,uBAAuB,SAAS,MAAM;AACzD,YAAI;AACF,gBAAM,YAAY,KAAK,MAAM,SAAS;AAItC,yBAAe,UAAU,OAAO,WAAW,UAAU,WAAW;AAAA,QAClE,QAAQ;AACN,yBAAe,aAAa;AAAA,QAC9B;AAEA,cAAM,KAAK,oBAAoB,cAAc,SAAS,QAAQ,SAAS,OAAO;AAAA,MAChF;AAEA,aAAO;AAAA,QACL,QAAQ,OAAO,aAAa,IAAI;AAC9B,gBAAM,QAAQ,sBAAsB;AAEpC,cAAI;AACF,6BAAiB,SAAS,mBAAmB,UAAU,KAAK,GAAG;AAC7D,oBAAM;AAAA,YACR;AAAA,UACF,SAAS,OAAO;AACd,kBAAM,gBAAgB,KAAK,gBAAgB,KAAK;AAChD,kBAAM,qBAAqB,cAAc,SAAS,cAAc,IAAI;AAAA,UACtE;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,KAAK,gBAAgB,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEQ,gBAAgB,OAA+B;AACrD,QAAI,iBAAiB,eAAe;AAClC,aAAO;AAAA,IACT;AAEA,QAAI,iBAAiB,OAAO;AAC1B,YAAM,WAAW;AAOjB,YAAM,SAAS,SAAS,UAAU,SAAS;AAC3C,YAAM,aAAa,SAAS,UAAU,aAAa,IAC/C,SAAS,SAAS,QAAQ,aAAa,GAAG,EAAE,IAC5C;AAEJ,UAAI,WAAW,KAAK;AAClB,eAAO,IAAI,cAAc,MAAM,SAAS,cAAc,QAAQ,UAAU;AAAA,MAC1E;AACA,UAAI,WAAW,OAAO,WAAW,KAAK;AACpC,eAAO,IAAI,cAAc,MAAM,SAAS,cAAc,MAAM;AAAA,MAC9D;AACA,UAAI,WAAW,KAAK;AAClB,eAAO,IAAI,cAAc,MAAM,SAAS,mBAAmB,MAAM;AAAA,MACnE;AACA,UAAI,UAAU,UAAU,KAAK;AAC3B,eAAO,IAAI,cAAc,MAAM,SAAS,gBAAgB,MAAM;AAAA,MAChE;AACA,UAAI,MAAM,SAAS,gBAAgB,SAAS,SAAS,aAAa;AAChE,eAAO,IAAI,cAAc,MAAM,SAAS,SAAS;AAAA,MACnD;AAEA,aAAO,IAAI,cAAc,MAAM,SAAS,WAAW,MAAM;AAAA,IAC3D;AAEA,WAAO,IAAI,cAAc,OAAO,KAAK,GAAG,SAAS;AAAA,EACnD;AAAA,EAEQ,oBACN,SACA,QACA,SACe;AACf,UAAM,mBAAmB,SAAS,IAAI,aAAa;AACnD,UAAM,aAAa,mBAAmB,SAAS,kBAAkB,EAAE,IAAI;AAEvE,QAAI,WAAW,KAAK;AAClB,aAAO,IAAI,cAAc,SAAS,cAAc,QAAQ,UAAU;AAAA,IACpE;AACA,QAAI,WAAW,OAAO,WAAW,KAAK;AACpC,aAAO,IAAI,cAAc,SAAS,cAAc,MAAM;AAAA,IACxD;AACA,QAAI,WAAW,KAAK;AAClB,aAAO,IAAI,cAAc,SAAS,mBAAmB,MAAM;AAAA,IAC7D;AACA,QAAI,UAAU,KAAK;AACjB,aAAO,IAAI,cAAc,SAAS,gBAAgB,MAAM;AAAA,IAC1D;AAEA,WAAO,IAAI,cAAc,SAAS,WAAW,MAAM;AAAA,EACrD;AAAA,EAEA,MAAM,eAAe,SAAqD;AACxE,UAAM,SAAS,gBAAgB,OAAO;AAEtC,WAAO;AAAA,MACL,MAAM,mBAAmB,MAAiC;AAAA,MAC1D,cAAc;AAAA,MACd,UAAU;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AG3YA,SAAS,SAAS;AASX,IAAM,0BAA0B,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9C,gBAAgB,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAGrC,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAG/B,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA;AAAA,EAGvD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA;AAAA,EAGhC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,cAAc,EAAE,KAAK,CAAC,YAAY,WAAW,QAAQ,MAAM,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvE,kBAAkB,EAAE,KAAK,CAAC,QAAQ,OAAO,UAAU,MAAM,CAAC,EAAE,SAAS;AACvE,CAAC,EAAE,YAAY;;;AC7BR,IAAM,WACX,OAAO;AAAA,EACL,CAAC,WAAkC,IAAI,iBAAiB,MAAM;AAAA,EAC9D,EAAE,iBAAiB,wBAAwB;AAC7C;","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';
@@ -0,0 +1,9 @@
1
+ import {
2
+ calculateCerebrasUsageCost,
3
+ getCerebrasModelPricing
4
+ } from "./chunk-NSNGOKA3.js";
5
+ export {
6
+ calculateCerebrasUsageCost,
7
+ getCerebrasModelPricing
8
+ };
9
+ //# sourceMappingURL=pricing.js.map
@@ -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.21.1",
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.21.1"
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.21.1"
37
+ "@standardagents/spec": "0.22.1"
33
38
  },
34
39
  "keywords": [
35
40
  "standardagents",