@ai-sdk/cerebras 2.0.51 → 2.0.54
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/CHANGELOG.md +19 -0
- package/dist/index.js +91 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +91 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/cerebras-chat-language-model-options.ts +3 -0
- package/src/cerebras-chat-language-model.ts +108 -0
- package/src/cerebras-provider.ts +37 -5
- package/src/fixtures/cerebras-structured-output-tools.1.json +47 -0
- package/src/fixtures/cerebras-structured-output-tools.2.json +48 -0
- package/src/fixtures/cererebras-structured-output-tools.1.chunks.txt +97 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @ai-sdk/cerebras
|
|
2
2
|
|
|
3
|
+
## 2.0.54
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [e40e1d4]
|
|
8
|
+
- @ai-sdk/openai-compatible@2.0.48
|
|
9
|
+
|
|
10
|
+
## 2.0.53
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- e99134d: feat(cerebras): add chat language model provider
|
|
15
|
+
|
|
16
|
+
## 2.0.52
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 96a365b: fix(cerebras): serialize reasoning parts as 'reasoning' on assistant messages
|
|
21
|
+
|
|
3
22
|
## 2.0.51
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -27,13 +27,84 @@ __export(index_exports, {
|
|
|
27
27
|
module.exports = __toCommonJS(index_exports);
|
|
28
28
|
|
|
29
29
|
// src/cerebras-provider.ts
|
|
30
|
-
var import_openai_compatible = require("@ai-sdk/openai-compatible");
|
|
31
30
|
var import_provider = require("@ai-sdk/provider");
|
|
32
31
|
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
32
|
+
|
|
33
|
+
// src/cerebras-chat-language-model.ts
|
|
34
|
+
var import_openai_compatible = require("@ai-sdk/openai-compatible");
|
|
35
|
+
function isStructuredOutputWithToolCallsFinishReason({
|
|
36
|
+
rawFinishReason,
|
|
37
|
+
hasText,
|
|
38
|
+
responseFormatType
|
|
39
|
+
}) {
|
|
40
|
+
return responseFormatType === "json" && rawFinishReason === "tool_calls" && hasText;
|
|
41
|
+
}
|
|
42
|
+
var CerebrasChatLanguageModel = class extends import_openai_compatible.OpenAICompatibleChatLanguageModel {
|
|
43
|
+
async doGenerate(options) {
|
|
44
|
+
var _a;
|
|
45
|
+
const result = await super.doGenerate(options);
|
|
46
|
+
if (!isStructuredOutputWithToolCallsFinishReason({
|
|
47
|
+
rawFinishReason: result.finishReason.raw,
|
|
48
|
+
hasText: result.content.some(
|
|
49
|
+
(part) => part.type === "text" && part.text.length > 0
|
|
50
|
+
),
|
|
51
|
+
responseFormatType: (_a = options.responseFormat) == null ? void 0 : _a.type
|
|
52
|
+
})) {
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
...result,
|
|
57
|
+
// Cerebras GLM can return valid structured output text while also
|
|
58
|
+
// repeating a tool call. Treat that mixed response as the final answer.
|
|
59
|
+
content: result.content.filter((part) => part.type !== "tool-call"),
|
|
60
|
+
finishReason: {
|
|
61
|
+
...result.finishReason,
|
|
62
|
+
unified: "stop"
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async doStream(options) {
|
|
67
|
+
const result = await super.doStream(options);
|
|
68
|
+
let hasText = false;
|
|
69
|
+
return {
|
|
70
|
+
...result,
|
|
71
|
+
stream: result.stream.pipeThrough(
|
|
72
|
+
new TransformStream({
|
|
73
|
+
transform(part, controller) {
|
|
74
|
+
var _a, _b;
|
|
75
|
+
if (part.type === "text-delta" && part.delta.length > 0) {
|
|
76
|
+
hasText = true;
|
|
77
|
+
}
|
|
78
|
+
if (part.type === "finish" && isStructuredOutputWithToolCallsFinishReason({
|
|
79
|
+
rawFinishReason: part.finishReason.raw,
|
|
80
|
+
hasText,
|
|
81
|
+
responseFormatType: (_a = options.responseFormat) == null ? void 0 : _a.type
|
|
82
|
+
})) {
|
|
83
|
+
controller.enqueue({
|
|
84
|
+
...part,
|
|
85
|
+
finishReason: {
|
|
86
|
+
...part.finishReason,
|
|
87
|
+
unified: "stop"
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (((_b = options.responseFormat) == null ? void 0 : _b.type) === "json" && hasText && (part.type === "tool-input-start" || part.type === "tool-input-delta" || part.type === "tool-input-end" || part.type === "tool-call")) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
controller.enqueue(part);
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
)
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// src/cerebras-provider.ts
|
|
33
104
|
var import_v4 = require("zod/v4");
|
|
34
105
|
|
|
35
106
|
// src/version.ts
|
|
36
|
-
var VERSION = true ? "2.0.
|
|
107
|
+
var VERSION = true ? "2.0.54" : "0.0.0-test";
|
|
37
108
|
|
|
38
109
|
// src/cerebras-provider.ts
|
|
39
110
|
var cerebrasErrorSchema = import_v4.z.object({
|
|
@@ -46,6 +117,21 @@ var cerebrasErrorStructure = {
|
|
|
46
117
|
errorSchema: cerebrasErrorSchema,
|
|
47
118
|
errorToMessage: (data) => data.message
|
|
48
119
|
};
|
|
120
|
+
function transformCerebrasRequestBody(args) {
|
|
121
|
+
return {
|
|
122
|
+
...args,
|
|
123
|
+
messages: Array.isArray(args.messages) ? args.messages.map((message) => {
|
|
124
|
+
if (message == null || typeof message !== "object" || message.role !== "assistant" || !("reasoning_content" in message)) {
|
|
125
|
+
return message;
|
|
126
|
+
}
|
|
127
|
+
const { reasoning_content, ...rest } = message;
|
|
128
|
+
return {
|
|
129
|
+
...rest,
|
|
130
|
+
...!("reasoning" in rest) && reasoning_content !== void 0 ? { reasoning: reasoning_content } : {}
|
|
131
|
+
};
|
|
132
|
+
}) : args.messages
|
|
133
|
+
};
|
|
134
|
+
}
|
|
49
135
|
function createCerebras(options = {}) {
|
|
50
136
|
var _a;
|
|
51
137
|
const baseURL = (0, import_provider_utils.withoutTrailingSlash)(
|
|
@@ -63,13 +149,14 @@ function createCerebras(options = {}) {
|
|
|
63
149
|
`ai-sdk/cerebras/${VERSION}`
|
|
64
150
|
);
|
|
65
151
|
const createLanguageModel = (modelId) => {
|
|
66
|
-
return new
|
|
152
|
+
return new CerebrasChatLanguageModel(modelId, {
|
|
67
153
|
provider: `cerebras.chat`,
|
|
68
154
|
url: ({ path }) => `${baseURL}${path}`,
|
|
69
155
|
headers: getHeaders,
|
|
70
156
|
fetch: options.fetch,
|
|
71
157
|
errorStructure: cerebrasErrorStructure,
|
|
72
|
-
supportsStructuredOutputs: true
|
|
158
|
+
supportsStructuredOutputs: true,
|
|
159
|
+
transformRequestBody: transformCerebrasRequestBody
|
|
73
160
|
});
|
|
74
161
|
};
|
|
75
162
|
const provider = (modelId) => createLanguageModel(modelId);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/cerebras-provider.ts","../src/version.ts"],"sourcesContent":["export { createCerebras, cerebras } from './cerebras-provider';\nexport type {\n CerebrasProvider,\n CerebrasProviderSettings,\n} from './cerebras-provider';\nexport type { CerebrasErrorData } from './cerebras-provider';\nexport { VERSION } from './version';\n","import {\n OpenAICompatibleChatLanguageModel,\n type ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport type { CerebrasChatModelId } from './cerebras-chat-options';\nimport { z } from 'zod/v4';\nimport { VERSION } from './version';\n\n// Add error schema and structure\nconst cerebrasErrorSchema = z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n});\n\nexport type CerebrasErrorData = z.infer<typeof cerebrasErrorSchema>;\n\nconst cerebrasErrorStructure: ProviderErrorStructure<CerebrasErrorData> = {\n errorSchema: cerebrasErrorSchema,\n errorToMessage: data => data.message,\n};\n\nexport interface CerebrasProviderSettings {\n /**\n * Cerebras API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface CerebrasProvider extends ProviderV3 {\n /**\n * Creates a Cerebras model for text generation.\n */\n (modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras model for text generation.\n */\n languageModel(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras chat model for text generation.\n */\n chat(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport function createCerebras(\n options: CerebrasProviderSettings = {},\n): CerebrasProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.cerebras.ai/v1',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'CEREBRAS_API_KEY',\n description: 'Cerebras API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/cerebras/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: CerebrasChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `cerebras.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: cerebrasErrorStructure,\n supportsStructuredOutputs: true,\n });\n };\n\n const provider = (modelId: CerebrasChatModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const cerebras = createCerebras();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,+BAGO;AACP,sBAIO;AACP,4BAKO;AAEP,gBAAkB;;;ACdX,IAAM,UACX,OACI,WACA;;;ADeN,IAAM,sBAAsB,YAAE,OAAO;AAAA,EACnC,SAAS,YAAE,OAAO;AAAA,EAClB,MAAM,YAAE,OAAO;AAAA,EACf,OAAO,YAAE,OAAO;AAAA,EAChB,MAAM,YAAE,OAAO;AACjB,CAAC;AAID,IAAM,yBAAoE;AAAA,EACxE,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B;AA4CO,SAAS,eACd,UAAoC,CAAC,GACnB;AA9EpB;AA+EE,QAAM,cAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,UACjB;AAAA,IACE;AAAA,MACE,eAAe,cAAU,kCAAW;AAAA,QAClC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,mBAAmB,OAAO;AAAA,EAC5B;AAEF,QAAM,sBAAsB,CAAC,YAAiC;AAC5D,WAAO,IAAI,2DAAkC,SAAS;AAAA,MACpD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,gBAAgB;AAAA,MAChB,2BAA2B;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAChB,oBAAoB,OAAO;AAE7B,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,WAAS,qBAAqB,SAAS;AACvC,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,eAAe;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/cerebras-provider.ts","../src/cerebras-chat-language-model.ts","../src/version.ts"],"sourcesContent":["export { createCerebras, cerebras } from './cerebras-provider';\nexport type {\n CerebrasProvider,\n CerebrasProviderSettings,\n} from './cerebras-provider';\nexport type { CerebrasErrorData } from './cerebras-provider';\nexport { VERSION } from './version';\n","import type { ProviderErrorStructure } from '@ai-sdk/openai-compatible';\nimport {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { CerebrasChatLanguageModel } from './cerebras-chat-language-model';\nimport type { CerebrasChatModelId } from './cerebras-chat-options';\nimport { z } from 'zod/v4';\nimport { VERSION } from './version';\n\n// Add error schema and structure\nconst cerebrasErrorSchema = z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n});\n\nexport type CerebrasErrorData = z.infer<typeof cerebrasErrorSchema>;\n\nconst cerebrasErrorStructure: ProviderErrorStructure<CerebrasErrorData> = {\n errorSchema: cerebrasErrorSchema,\n errorToMessage: data => data.message,\n};\n\n/**\n * Cerebras expects assistant reasoning history in the `reasoning` field, while\n * the shared OpenAI-compatible converter serializes it as `reasoning_content`.\n */\nfunction transformCerebrasRequestBody(\n args: Record<string, any>,\n): Record<string, any> {\n return {\n ...args,\n messages: Array.isArray(args.messages)\n ? args.messages.map(message => {\n if (\n message == null ||\n typeof message !== 'object' ||\n message.role !== 'assistant' ||\n !('reasoning_content' in message)\n ) {\n return message;\n }\n\n const { reasoning_content, ...rest } = message;\n\n return {\n ...rest,\n ...(!('reasoning' in rest) && reasoning_content !== undefined\n ? { reasoning: reasoning_content }\n : {}),\n };\n })\n : args.messages,\n };\n}\n\nexport interface CerebrasProviderSettings {\n /**\n * Cerebras API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface CerebrasProvider extends ProviderV3 {\n /**\n * Creates a Cerebras model for text generation.\n */\n (modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras model for text generation.\n */\n languageModel(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras chat model for text generation.\n */\n chat(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport function createCerebras(\n options: CerebrasProviderSettings = {},\n): CerebrasProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.cerebras.ai/v1',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'CEREBRAS_API_KEY',\n description: 'Cerebras API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/cerebras/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: CerebrasChatModelId) => {\n return new CerebrasChatLanguageModel(modelId, {\n provider: `cerebras.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: cerebrasErrorStructure,\n supportsStructuredOutputs: true,\n transformRequestBody: transformCerebrasRequestBody,\n });\n };\n\n const provider = (modelId: CerebrasChatModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const cerebras = createCerebras();\n","import { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport type {\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n} from '@ai-sdk/provider';\n\nfunction isStructuredOutputWithToolCallsFinishReason({\n rawFinishReason,\n hasText,\n responseFormatType,\n}: {\n rawFinishReason: string | undefined;\n hasText: boolean;\n responseFormatType:\n | NonNullable<LanguageModelV3CallOptions['responseFormat']>['type']\n | undefined;\n}) {\n return (\n responseFormatType === 'json' && rawFinishReason === 'tool_calls' && hasText\n );\n}\n\nexport class CerebrasChatLanguageModel extends OpenAICompatibleChatLanguageModel {\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const result = await super.doGenerate(options);\n\n if (\n !isStructuredOutputWithToolCallsFinishReason({\n rawFinishReason: result.finishReason.raw,\n hasText: result.content.some(\n part => part.type === 'text' && part.text.length > 0,\n ),\n responseFormatType: options.responseFormat?.type,\n })\n ) {\n return result;\n }\n\n return {\n ...result,\n // Cerebras GLM can return valid structured output text while also\n // repeating a tool call. Treat that mixed response as the final answer.\n content: result.content.filter(part => part.type !== 'tool-call'),\n finishReason: {\n ...result.finishReason,\n unified: 'stop',\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const result = await super.doStream(options);\n let hasText = false;\n\n return {\n ...result,\n stream: result.stream.pipeThrough(\n new TransformStream<\n LanguageModelV3StreamPart,\n LanguageModelV3StreamPart\n >({\n transform(part, controller) {\n if (part.type === 'text-delta' && part.delta.length > 0) {\n hasText = true;\n }\n\n if (\n part.type === 'finish' &&\n isStructuredOutputWithToolCallsFinishReason({\n rawFinishReason: part.finishReason.raw,\n hasText,\n responseFormatType: options.responseFormat?.type,\n })\n ) {\n controller.enqueue({\n ...part,\n finishReason: {\n ...part.finishReason,\n unified: 'stop',\n },\n });\n return;\n }\n\n if (\n options.responseFormat?.type === 'json' &&\n hasText &&\n (part.type === 'tool-input-start' ||\n part.type === 'tool-input-delta' ||\n part.type === 'tool-input-end' ||\n part.type === 'tool-call')\n ) {\n return;\n }\n\n controller.enqueue(part);\n },\n }),\n ),\n };\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
// src/cerebras-provider.ts
|
|
2
|
-
import {
|
|
3
|
-
OpenAICompatibleChatLanguageModel
|
|
4
|
-
} from "@ai-sdk/openai-compatible";
|
|
5
2
|
import {
|
|
6
3
|
NoSuchModelError
|
|
7
4
|
} from "@ai-sdk/provider";
|
|
@@ -10,10 +7,82 @@ import {
|
|
|
10
7
|
withoutTrailingSlash,
|
|
11
8
|
withUserAgentSuffix
|
|
12
9
|
} from "@ai-sdk/provider-utils";
|
|
10
|
+
|
|
11
|
+
// src/cerebras-chat-language-model.ts
|
|
12
|
+
import { OpenAICompatibleChatLanguageModel } from "@ai-sdk/openai-compatible";
|
|
13
|
+
function isStructuredOutputWithToolCallsFinishReason({
|
|
14
|
+
rawFinishReason,
|
|
15
|
+
hasText,
|
|
16
|
+
responseFormatType
|
|
17
|
+
}) {
|
|
18
|
+
return responseFormatType === "json" && rawFinishReason === "tool_calls" && hasText;
|
|
19
|
+
}
|
|
20
|
+
var CerebrasChatLanguageModel = class extends OpenAICompatibleChatLanguageModel {
|
|
21
|
+
async doGenerate(options) {
|
|
22
|
+
var _a;
|
|
23
|
+
const result = await super.doGenerate(options);
|
|
24
|
+
if (!isStructuredOutputWithToolCallsFinishReason({
|
|
25
|
+
rawFinishReason: result.finishReason.raw,
|
|
26
|
+
hasText: result.content.some(
|
|
27
|
+
(part) => part.type === "text" && part.text.length > 0
|
|
28
|
+
),
|
|
29
|
+
responseFormatType: (_a = options.responseFormat) == null ? void 0 : _a.type
|
|
30
|
+
})) {
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
...result,
|
|
35
|
+
// Cerebras GLM can return valid structured output text while also
|
|
36
|
+
// repeating a tool call. Treat that mixed response as the final answer.
|
|
37
|
+
content: result.content.filter((part) => part.type !== "tool-call"),
|
|
38
|
+
finishReason: {
|
|
39
|
+
...result.finishReason,
|
|
40
|
+
unified: "stop"
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async doStream(options) {
|
|
45
|
+
const result = await super.doStream(options);
|
|
46
|
+
let hasText = false;
|
|
47
|
+
return {
|
|
48
|
+
...result,
|
|
49
|
+
stream: result.stream.pipeThrough(
|
|
50
|
+
new TransformStream({
|
|
51
|
+
transform(part, controller) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
if (part.type === "text-delta" && part.delta.length > 0) {
|
|
54
|
+
hasText = true;
|
|
55
|
+
}
|
|
56
|
+
if (part.type === "finish" && isStructuredOutputWithToolCallsFinishReason({
|
|
57
|
+
rawFinishReason: part.finishReason.raw,
|
|
58
|
+
hasText,
|
|
59
|
+
responseFormatType: (_a = options.responseFormat) == null ? void 0 : _a.type
|
|
60
|
+
})) {
|
|
61
|
+
controller.enqueue({
|
|
62
|
+
...part,
|
|
63
|
+
finishReason: {
|
|
64
|
+
...part.finishReason,
|
|
65
|
+
unified: "stop"
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (((_b = options.responseFormat) == null ? void 0 : _b.type) === "json" && hasText && (part.type === "tool-input-start" || part.type === "tool-input-delta" || part.type === "tool-input-end" || part.type === "tool-call")) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
controller.enqueue(part);
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
)
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// src/cerebras-provider.ts
|
|
13
82
|
import { z } from "zod/v4";
|
|
14
83
|
|
|
15
84
|
// src/version.ts
|
|
16
|
-
var VERSION = true ? "2.0.
|
|
85
|
+
var VERSION = true ? "2.0.54" : "0.0.0-test";
|
|
17
86
|
|
|
18
87
|
// src/cerebras-provider.ts
|
|
19
88
|
var cerebrasErrorSchema = z.object({
|
|
@@ -26,6 +95,21 @@ var cerebrasErrorStructure = {
|
|
|
26
95
|
errorSchema: cerebrasErrorSchema,
|
|
27
96
|
errorToMessage: (data) => data.message
|
|
28
97
|
};
|
|
98
|
+
function transformCerebrasRequestBody(args) {
|
|
99
|
+
return {
|
|
100
|
+
...args,
|
|
101
|
+
messages: Array.isArray(args.messages) ? args.messages.map((message) => {
|
|
102
|
+
if (message == null || typeof message !== "object" || message.role !== "assistant" || !("reasoning_content" in message)) {
|
|
103
|
+
return message;
|
|
104
|
+
}
|
|
105
|
+
const { reasoning_content, ...rest } = message;
|
|
106
|
+
return {
|
|
107
|
+
...rest,
|
|
108
|
+
...!("reasoning" in rest) && reasoning_content !== void 0 ? { reasoning: reasoning_content } : {}
|
|
109
|
+
};
|
|
110
|
+
}) : args.messages
|
|
111
|
+
};
|
|
112
|
+
}
|
|
29
113
|
function createCerebras(options = {}) {
|
|
30
114
|
var _a;
|
|
31
115
|
const baseURL = withoutTrailingSlash(
|
|
@@ -43,13 +127,14 @@ function createCerebras(options = {}) {
|
|
|
43
127
|
`ai-sdk/cerebras/${VERSION}`
|
|
44
128
|
);
|
|
45
129
|
const createLanguageModel = (modelId) => {
|
|
46
|
-
return new
|
|
130
|
+
return new CerebrasChatLanguageModel(modelId, {
|
|
47
131
|
provider: `cerebras.chat`,
|
|
48
132
|
url: ({ path }) => `${baseURL}${path}`,
|
|
49
133
|
headers: getHeaders,
|
|
50
134
|
fetch: options.fetch,
|
|
51
135
|
errorStructure: cerebrasErrorStructure,
|
|
52
|
-
supportsStructuredOutputs: true
|
|
136
|
+
supportsStructuredOutputs: true,
|
|
137
|
+
transformRequestBody: transformCerebrasRequestBody
|
|
53
138
|
});
|
|
54
139
|
};
|
|
55
140
|
const provider = (modelId) => createLanguageModel(modelId);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cerebras-provider.ts","../src/version.ts"],"sourcesContent":["import {\n OpenAICompatibleChatLanguageModel,\n type ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport type { CerebrasChatModelId } from './cerebras-chat-options';\nimport { z } from 'zod/v4';\nimport { VERSION } from './version';\n\n// Add error schema and structure\nconst cerebrasErrorSchema = z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n});\n\nexport type CerebrasErrorData = z.infer<typeof cerebrasErrorSchema>;\n\nconst cerebrasErrorStructure: ProviderErrorStructure<CerebrasErrorData> = {\n errorSchema: cerebrasErrorSchema,\n errorToMessage: data => data.message,\n};\n\nexport interface CerebrasProviderSettings {\n /**\n * Cerebras API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface CerebrasProvider extends ProviderV3 {\n /**\n * Creates a Cerebras model for text generation.\n */\n (modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras model for text generation.\n */\n languageModel(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras chat model for text generation.\n */\n chat(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport function createCerebras(\n options: CerebrasProviderSettings = {},\n): CerebrasProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.cerebras.ai/v1',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'CEREBRAS_API_KEY',\n description: 'Cerebras API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/cerebras/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: CerebrasChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `cerebras.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: cerebrasErrorStructure,\n supportsStructuredOutputs: true,\n });\n };\n\n const provider = (modelId: CerebrasChatModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const cerebras = createCerebras();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,SAAS;;;ACdX,IAAM,UACX,OACI,WACA;;;ADeN,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AACjB,CAAC;AAID,IAAM,yBAAoE;AAAA,EACxE,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B;AA4CO,SAAS,eACd,UAAoC,CAAC,GACnB;AA9EpB;AA+EE,QAAM,UAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,eAAe,UAAU,WAAW;AAAA,QAClC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,mBAAmB,OAAO;AAAA,EAC5B;AAEF,QAAM,sBAAsB,CAAC,YAAiC;AAC5D,WAAO,IAAI,kCAAkC,SAAS;AAAA,MACpD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,gBAAgB;AAAA,MAChB,2BAA2B;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,YAChB,oBAAoB,OAAO;AAE7B,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,WAAS,qBAAqB,SAAS;AACvC,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,eAAe;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cerebras-provider.ts","../src/cerebras-chat-language-model.ts","../src/version.ts"],"sourcesContent":["import type { ProviderErrorStructure } from '@ai-sdk/openai-compatible';\nimport {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { CerebrasChatLanguageModel } from './cerebras-chat-language-model';\nimport type { CerebrasChatModelId } from './cerebras-chat-options';\nimport { z } from 'zod/v4';\nimport { VERSION } from './version';\n\n// Add error schema and structure\nconst cerebrasErrorSchema = z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n});\n\nexport type CerebrasErrorData = z.infer<typeof cerebrasErrorSchema>;\n\nconst cerebrasErrorStructure: ProviderErrorStructure<CerebrasErrorData> = {\n errorSchema: cerebrasErrorSchema,\n errorToMessage: data => data.message,\n};\n\n/**\n * Cerebras expects assistant reasoning history in the `reasoning` field, while\n * the shared OpenAI-compatible converter serializes it as `reasoning_content`.\n */\nfunction transformCerebrasRequestBody(\n args: Record<string, any>,\n): Record<string, any> {\n return {\n ...args,\n messages: Array.isArray(args.messages)\n ? args.messages.map(message => {\n if (\n message == null ||\n typeof message !== 'object' ||\n message.role !== 'assistant' ||\n !('reasoning_content' in message)\n ) {\n return message;\n }\n\n const { reasoning_content, ...rest } = message;\n\n return {\n ...rest,\n ...(!('reasoning' in rest) && reasoning_content !== undefined\n ? { reasoning: reasoning_content }\n : {}),\n };\n })\n : args.messages,\n };\n}\n\nexport interface CerebrasProviderSettings {\n /**\n * Cerebras API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface CerebrasProvider extends ProviderV3 {\n /**\n * Creates a Cerebras model for text generation.\n */\n (modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras model for text generation.\n */\n languageModel(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * Creates a Cerebras chat model for text generation.\n */\n chat(modelId: CerebrasChatModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport function createCerebras(\n options: CerebrasProviderSettings = {},\n): CerebrasProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.cerebras.ai/v1',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'CEREBRAS_API_KEY',\n description: 'Cerebras API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/cerebras/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: CerebrasChatModelId) => {\n return new CerebrasChatLanguageModel(modelId, {\n provider: `cerebras.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: cerebrasErrorStructure,\n supportsStructuredOutputs: true,\n transformRequestBody: transformCerebrasRequestBody,\n });\n };\n\n const provider = (modelId: CerebrasChatModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const cerebras = createCerebras();\n","import { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport type {\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n} from '@ai-sdk/provider';\n\nfunction isStructuredOutputWithToolCallsFinishReason({\n rawFinishReason,\n hasText,\n responseFormatType,\n}: {\n rawFinishReason: string | undefined;\n hasText: boolean;\n responseFormatType:\n | NonNullable<LanguageModelV3CallOptions['responseFormat']>['type']\n | undefined;\n}) {\n return (\n responseFormatType === 'json' && rawFinishReason === 'tool_calls' && hasText\n );\n}\n\nexport class CerebrasChatLanguageModel extends OpenAICompatibleChatLanguageModel {\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const result = await super.doGenerate(options);\n\n if (\n !isStructuredOutputWithToolCallsFinishReason({\n rawFinishReason: result.finishReason.raw,\n hasText: result.content.some(\n part => part.type === 'text' && part.text.length > 0,\n ),\n responseFormatType: options.responseFormat?.type,\n })\n ) {\n return result;\n }\n\n return {\n ...result,\n // Cerebras GLM can return valid structured output text while also\n // repeating a tool call. Treat that mixed response as the final answer.\n content: result.content.filter(part => part.type !== 'tool-call'),\n finishReason: {\n ...result.finishReason,\n unified: 'stop',\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const result = await super.doStream(options);\n let hasText = false;\n\n return {\n ...result,\n stream: result.stream.pipeThrough(\n new TransformStream<\n LanguageModelV3StreamPart,\n LanguageModelV3StreamPart\n >({\n transform(part, controller) {\n if (part.type === 'text-delta' && part.delta.length > 0) {\n hasText = true;\n }\n\n if (\n part.type === 'finish' &&\n isStructuredOutputWithToolCallsFinishReason({\n rawFinishReason: part.finishReason.raw,\n hasText,\n responseFormatType: options.responseFormat?.type,\n })\n ) {\n controller.enqueue({\n ...part,\n finishReason: {\n ...part.finishReason,\n unified: 'stop',\n },\n });\n return;\n }\n\n if (\n options.responseFormat?.type === 'json' &&\n hasText &&\n (part.type === 'tool-input-start' ||\n part.type === 'tool-input-delta' ||\n part.type === 'tool-input-end' ||\n part.type === 'tool-call')\n ) {\n return;\n }\n\n controller.enqueue(part);\n },\n }),\n ),\n };\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/cerebras",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.54",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
+
"@ai-sdk/openai-compatible": "2.0.48",
|
|
32
33
|
"@ai-sdk/provider": "3.0.10",
|
|
33
|
-
"@ai-sdk/provider-utils": "4.0.27"
|
|
34
|
-
"@ai-sdk/openai-compatible": "2.0.47"
|
|
34
|
+
"@ai-sdk/provider-utils": "4.0.27"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "20.17.24",
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';
|
|
2
|
+
import type {
|
|
3
|
+
LanguageModelV3CallOptions,
|
|
4
|
+
LanguageModelV3GenerateResult,
|
|
5
|
+
LanguageModelV3StreamPart,
|
|
6
|
+
LanguageModelV3StreamResult,
|
|
7
|
+
} from '@ai-sdk/provider';
|
|
8
|
+
|
|
9
|
+
function isStructuredOutputWithToolCallsFinishReason({
|
|
10
|
+
rawFinishReason,
|
|
11
|
+
hasText,
|
|
12
|
+
responseFormatType,
|
|
13
|
+
}: {
|
|
14
|
+
rawFinishReason: string | undefined;
|
|
15
|
+
hasText: boolean;
|
|
16
|
+
responseFormatType:
|
|
17
|
+
| NonNullable<LanguageModelV3CallOptions['responseFormat']>['type']
|
|
18
|
+
| undefined;
|
|
19
|
+
}) {
|
|
20
|
+
return (
|
|
21
|
+
responseFormatType === 'json' && rawFinishReason === 'tool_calls' && hasText
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class CerebrasChatLanguageModel extends OpenAICompatibleChatLanguageModel {
|
|
26
|
+
async doGenerate(
|
|
27
|
+
options: LanguageModelV3CallOptions,
|
|
28
|
+
): Promise<LanguageModelV3GenerateResult> {
|
|
29
|
+
const result = await super.doGenerate(options);
|
|
30
|
+
|
|
31
|
+
if (
|
|
32
|
+
!isStructuredOutputWithToolCallsFinishReason({
|
|
33
|
+
rawFinishReason: result.finishReason.raw,
|
|
34
|
+
hasText: result.content.some(
|
|
35
|
+
part => part.type === 'text' && part.text.length > 0,
|
|
36
|
+
),
|
|
37
|
+
responseFormatType: options.responseFormat?.type,
|
|
38
|
+
})
|
|
39
|
+
) {
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
...result,
|
|
45
|
+
// Cerebras GLM can return valid structured output text while also
|
|
46
|
+
// repeating a tool call. Treat that mixed response as the final answer.
|
|
47
|
+
content: result.content.filter(part => part.type !== 'tool-call'),
|
|
48
|
+
finishReason: {
|
|
49
|
+
...result.finishReason,
|
|
50
|
+
unified: 'stop',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async doStream(
|
|
56
|
+
options: LanguageModelV3CallOptions,
|
|
57
|
+
): Promise<LanguageModelV3StreamResult> {
|
|
58
|
+
const result = await super.doStream(options);
|
|
59
|
+
let hasText = false;
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
...result,
|
|
63
|
+
stream: result.stream.pipeThrough(
|
|
64
|
+
new TransformStream<
|
|
65
|
+
LanguageModelV3StreamPart,
|
|
66
|
+
LanguageModelV3StreamPart
|
|
67
|
+
>({
|
|
68
|
+
transform(part, controller) {
|
|
69
|
+
if (part.type === 'text-delta' && part.delta.length > 0) {
|
|
70
|
+
hasText = true;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (
|
|
74
|
+
part.type === 'finish' &&
|
|
75
|
+
isStructuredOutputWithToolCallsFinishReason({
|
|
76
|
+
rawFinishReason: part.finishReason.raw,
|
|
77
|
+
hasText,
|
|
78
|
+
responseFormatType: options.responseFormat?.type,
|
|
79
|
+
})
|
|
80
|
+
) {
|
|
81
|
+
controller.enqueue({
|
|
82
|
+
...part,
|
|
83
|
+
finishReason: {
|
|
84
|
+
...part.finishReason,
|
|
85
|
+
unified: 'stop',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (
|
|
92
|
+
options.responseFormat?.type === 'json' &&
|
|
93
|
+
hasText &&
|
|
94
|
+
(part.type === 'tool-input-start' ||
|
|
95
|
+
part.type === 'tool-input-delta' ||
|
|
96
|
+
part.type === 'tool-input-end' ||
|
|
97
|
+
part.type === 'tool-call')
|
|
98
|
+
) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
controller.enqueue(part);
|
|
103
|
+
},
|
|
104
|
+
}),
|
|
105
|
+
),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
package/src/cerebras-provider.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
OpenAICompatibleChatLanguageModel,
|
|
3
|
-
type ProviderErrorStructure,
|
|
4
|
-
} from '@ai-sdk/openai-compatible';
|
|
1
|
+
import type { ProviderErrorStructure } from '@ai-sdk/openai-compatible';
|
|
5
2
|
import {
|
|
6
3
|
NoSuchModelError,
|
|
7
4
|
type LanguageModelV3,
|
|
@@ -13,6 +10,7 @@ import {
|
|
|
13
10
|
withUserAgentSuffix,
|
|
14
11
|
type FetchFunction,
|
|
15
12
|
} from '@ai-sdk/provider-utils';
|
|
13
|
+
import { CerebrasChatLanguageModel } from './cerebras-chat-language-model';
|
|
16
14
|
import type { CerebrasChatModelId } from './cerebras-chat-options';
|
|
17
15
|
import { z } from 'zod/v4';
|
|
18
16
|
import { VERSION } from './version';
|
|
@@ -32,6 +30,39 @@ const cerebrasErrorStructure: ProviderErrorStructure<CerebrasErrorData> = {
|
|
|
32
30
|
errorToMessage: data => data.message,
|
|
33
31
|
};
|
|
34
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Cerebras expects assistant reasoning history in the `reasoning` field, while
|
|
35
|
+
* the shared OpenAI-compatible converter serializes it as `reasoning_content`.
|
|
36
|
+
*/
|
|
37
|
+
function transformCerebrasRequestBody(
|
|
38
|
+
args: Record<string, any>,
|
|
39
|
+
): Record<string, any> {
|
|
40
|
+
return {
|
|
41
|
+
...args,
|
|
42
|
+
messages: Array.isArray(args.messages)
|
|
43
|
+
? args.messages.map(message => {
|
|
44
|
+
if (
|
|
45
|
+
message == null ||
|
|
46
|
+
typeof message !== 'object' ||
|
|
47
|
+
message.role !== 'assistant' ||
|
|
48
|
+
!('reasoning_content' in message)
|
|
49
|
+
) {
|
|
50
|
+
return message;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const { reasoning_content, ...rest } = message;
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
...rest,
|
|
57
|
+
...(!('reasoning' in rest) && reasoning_content !== undefined
|
|
58
|
+
? { reasoning: reasoning_content }
|
|
59
|
+
: {}),
|
|
60
|
+
};
|
|
61
|
+
})
|
|
62
|
+
: args.messages,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
35
66
|
export interface CerebrasProviderSettings {
|
|
36
67
|
/**
|
|
37
68
|
* Cerebras API key.
|
|
@@ -94,13 +125,14 @@ export function createCerebras(
|
|
|
94
125
|
);
|
|
95
126
|
|
|
96
127
|
const createLanguageModel = (modelId: CerebrasChatModelId) => {
|
|
97
|
-
return new
|
|
128
|
+
return new CerebrasChatLanguageModel(modelId, {
|
|
98
129
|
provider: `cerebras.chat`,
|
|
99
130
|
url: ({ path }) => `${baseURL}${path}`,
|
|
100
131
|
headers: getHeaders,
|
|
101
132
|
fetch: options.fetch,
|
|
102
133
|
errorStructure: cerebrasErrorStructure,
|
|
103
134
|
supportsStructuredOutputs: true,
|
|
135
|
+
transformRequestBody: transformCerebrasRequestBody,
|
|
104
136
|
});
|
|
105
137
|
};
|
|
106
138
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "chatcmpl-d89ba80c-26b3-442c-ac3c-d7e94a99c484",
|
|
3
|
+
"choices": [
|
|
4
|
+
{
|
|
5
|
+
"finish_reason": "tool_calls",
|
|
6
|
+
"index": 0,
|
|
7
|
+
"message": {
|
|
8
|
+
"reasoning": "The user is asking about a \"magic number\". I see that I have access to a function called \"nonUsefulTool\" which \"returns a magic number\". This seems like exactly what the user is asking for. Let me call this function to get the magic number for them.",
|
|
9
|
+
"tool_calls": [
|
|
10
|
+
{
|
|
11
|
+
"function": {
|
|
12
|
+
"name": "nonUsefulTool",
|
|
13
|
+
"arguments": "{}"
|
|
14
|
+
},
|
|
15
|
+
"type": "function",
|
|
16
|
+
"id": "85e4fd267"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"role": "assistant"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"created": 1779146781,
|
|
24
|
+
"model": "zai-glm-4.7",
|
|
25
|
+
"system_fingerprint": "fp_a33c042689e969567008",
|
|
26
|
+
"object": "chat.completion",
|
|
27
|
+
"usage": {
|
|
28
|
+
"total_tokens": 387,
|
|
29
|
+
"completion_tokens": 65,
|
|
30
|
+
"completion_tokens_details": {
|
|
31
|
+
"accepted_prediction_tokens": 0,
|
|
32
|
+
"rejected_prediction_tokens": 0,
|
|
33
|
+
"reasoning_tokens": 58
|
|
34
|
+
},
|
|
35
|
+
"prompt_tokens": 322,
|
|
36
|
+
"prompt_tokens_details": {
|
|
37
|
+
"cached_tokens": 256
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"time_info": {
|
|
41
|
+
"created": 1779146781.786984,
|
|
42
|
+
"queue_time": 0.002922005,
|
|
43
|
+
"prompt_time": 0.010518105,
|
|
44
|
+
"completion_time": 0.118095092,
|
|
45
|
+
"total_time": 0.13299274444580078
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "chatcmpl-a6f2645e-5553-4ede-acde-612e0035b1cc",
|
|
3
|
+
"choices": [
|
|
4
|
+
{
|
|
5
|
+
"finish_reason": "tool_calls",
|
|
6
|
+
"index": 0,
|
|
7
|
+
"message": {
|
|
8
|
+
"content": "{\"result\":\"2026\"}",
|
|
9
|
+
"reasoning": "The function returned 2026 as the magic number. Now I need to return this as a JSON object matching the specified schema. The schema requires a \"result\" property of type string. So I should wrap the magic number in a string.",
|
|
10
|
+
"tool_calls": [
|
|
11
|
+
{
|
|
12
|
+
"function": {
|
|
13
|
+
"name": "nonUsefulTool",
|
|
14
|
+
"arguments": "{}"
|
|
15
|
+
},
|
|
16
|
+
"type": "function",
|
|
17
|
+
"id": "0babb4517"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"role": "assistant"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"created": 1779146782,
|
|
25
|
+
"model": "zai-glm-4.7",
|
|
26
|
+
"system_fingerprint": "fp_a33c042689e969567008",
|
|
27
|
+
"object": "chat.completion",
|
|
28
|
+
"usage": {
|
|
29
|
+
"total_tokens": 457,
|
|
30
|
+
"completion_tokens": 63,
|
|
31
|
+
"completion_tokens_details": {
|
|
32
|
+
"accepted_prediction_tokens": 0,
|
|
33
|
+
"rejected_prediction_tokens": 0,
|
|
34
|
+
"reasoning_tokens": 50
|
|
35
|
+
},
|
|
36
|
+
"prompt_tokens": 394,
|
|
37
|
+
"prompt_tokens_details": {
|
|
38
|
+
"cached_tokens": 256
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"time_info": {
|
|
42
|
+
"created": 1779146782.19271,
|
|
43
|
+
"queue_time": 0.002844976,
|
|
44
|
+
"prompt_time": 0.012194163,
|
|
45
|
+
"completion_time": 0.115990643,
|
|
46
|
+
"total_time": 0.13260841369628906
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"role":"assistant"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
2
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"The"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
3
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" user is asking about a \""},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
4
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"magic number\". I"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
5
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" have"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
6
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" access"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
7
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" to"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
8
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" a function called"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
9
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" \"non"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
10
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"UsefulTool\" that \""},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
11
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"returns a"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
12
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" magic number\". Let me"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
13
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" call this"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
14
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" function to get"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
15
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" the"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
16
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" magic number for the"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
17
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" user.\n\n"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
18
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"Looking at"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
19
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" the function schema:\n"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
20
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"-"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
21
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" Function name"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
22
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":": \""},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
23
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"non"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
24
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"UsefulTool\"\n- Parameters: empty object"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
25
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" ("},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
26
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"no parameters"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
27
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" required)\n"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
28
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"- Description:"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
29
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" \"A non-useful tool that returns a magic number\"\n\nI"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
30
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" should"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
31
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" call"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
32
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":" this function to get the magic number"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
33
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"reasoning":"."},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
34
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{"tool_calls":[{"function":{"name":"nonUsefulTool","arguments":"{}"},"type":"function","id":"bbd2b9d98","index":0}]},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
35
|
+
{"id":"chatcmpl-9e97f9ca-9626-4ef8-8543-6e3ee7cef659","choices":[{"delta":{},"finish_reason":"tool_calls","index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk","usage":{"total_tokens":426,"completion_tokens":104,"completion_tokens_details":{"accepted_prediction_tokens":0,"rejected_prediction_tokens":0,"reasoning_tokens":97},"prompt_tokens":322,"prompt_tokens_details":{"cached_tokens":256}},"time_info":{"created":1779147581.1957242,"queue_time":0.00306479,"prompt_time":0.01150595,"completion_time":0.16727912,"total_time":0.1844015121459961}}
|
|
36
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"role":"assistant"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
37
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"The"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
38
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" nonUsefulTool returned the"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
39
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" number"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
40
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" "},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
41
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"2026"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
42
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" as the"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
43
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" \""},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
44
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"magic number\"."},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
45
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" Now I need"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
46
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" to provide this"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
47
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" result in"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
48
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" the specified JSON"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
49
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" format according"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
50
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" to the"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
51
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" schema provided.\n\n"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
52
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"The schema"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
53
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" requires:\n-"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
54
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" A"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
55
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" JSON object"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
56
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" with a \"result\" property of type"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
57
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" string\n"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
58
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"- The \"result"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
59
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"\" property is required"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
60
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"\n"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
61
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"- No"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
62
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" additional"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
63
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" properties are allowed"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
64
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"\n\nSo I need"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
65
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" to"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
66
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" return"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
67
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":":\n```"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
68
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"json\n{\"result\":"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
69
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" \"2026"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
70
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"\"}\n```\n\nNote"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
71
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" that the"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
72
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" result should"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
73
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" be"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
74
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" a"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
75
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" string"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
76
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" according"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
77
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" to"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
78
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" the"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
79
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" schema"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
80
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":","},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
81
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" even"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
82
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" though"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
83
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" it"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
84
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"'s"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
85
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" a"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
86
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":" number"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
87
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"reasoning":"."},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
88
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
89
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"content":"{\""},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
90
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"content":"result"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
91
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"content":"\":"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
92
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"content":" \""},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
93
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"content":"202"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
94
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"content":"6"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
95
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"content":"\"}"},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
96
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{"tool_calls":[{"function":{"name":"nonUsefulTool","arguments":"{}"},"type":"function","id":"e0ecf32e0","index":0}]},"index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk"}
|
|
97
|
+
{"id":"chatcmpl-f4bd7eab-cdbc-418d-896a-ea0b8d5e44ce","choices":[{"delta":{},"finish_reason":"tool_calls","index":0}],"created":1779147581,"model":"zai-glm-4.7","system_fingerprint":"fp_a33c042689e969567008","object":"chat.completion.chunk","usage":{"total_tokens":555,"completion_tokens":122,"completion_tokens_details":{"accepted_prediction_tokens":0,"rejected_prediction_tokens":0,"reasoning_tokens":108},"prompt_tokens":433,"prompt_tokens_details":{"cached_tokens":256}},"time_info":{"created":1779147581.570175,"queue_time":0.003384742,"prompt_time":0.012728517,"completion_time":0.220198588,"total_time":0.34409451484680176}}
|