@ai-sdk/typesafe-ai 3.0.6 → 3.0.8
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 +15 -0
- package/dist/index.js +7 -12
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @ai-sdk/typesafe-ai
|
|
2
2
|
|
|
3
|
+
## 3.0.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [af9597b]
|
|
8
|
+
- Updated dependencies [bc49f78]
|
|
9
|
+
- @ai-sdk/provider-utils@5.0.49
|
|
10
|
+
|
|
11
|
+
## 3.0.7
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [be877ff]
|
|
16
|
+
- @ai-sdk/provider-utils@5.0.48
|
|
17
|
+
|
|
3
18
|
## 3.0.6
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -59,14 +59,11 @@ var typesafeFailedResponseHandler = createJsonErrorResponseHandler({
|
|
|
59
59
|
error: z.union([z.string(), z.object({ message: z.string().nullish() })]).nullish(),
|
|
60
60
|
error_type: z.string().nullish()
|
|
61
61
|
}),
|
|
62
|
-
errorToMessage: (error) =>
|
|
63
|
-
var _a, _b, _c, _d, _e;
|
|
64
|
-
return (_e = (_d = (_c = (_b = error.message) != null ? _b : typeof error.error === "string" ? error.error : (_a = error.error) == null ? void 0 : _a.message) != null ? _c : typeof error.detail === "string" ? error.detail : JSON.stringify(error.detail)) != null ? _d : error.error_type) != null ? _e : "TypeSafe request failed";
|
|
65
|
-
}
|
|
62
|
+
errorToMessage: (error) => error.message ?? (typeof error.error === "string" ? error.error : error.error?.message) ?? (typeof error.detail === "string" ? error.detail : JSON.stringify(error.detail)) ?? error.error_type ?? "TypeSafe request failed"
|
|
66
63
|
});
|
|
67
64
|
|
|
68
65
|
// src/version.ts
|
|
69
|
-
var VERSION = true ? "3.0.
|
|
66
|
+
var VERSION = true ? "3.0.8" : "0.0.0-test";
|
|
70
67
|
|
|
71
68
|
// src/typesafe-ai-evaluation-model.ts
|
|
72
69
|
var EvaluationTypeSafeAiModel = class _EvaluationTypeSafeAiModel {
|
|
@@ -95,7 +92,6 @@ var EvaluationTypeSafeAiModel = class _EvaluationTypeSafeAiModel {
|
|
|
95
92
|
abortSignal,
|
|
96
93
|
providerOptions
|
|
97
94
|
}) {
|
|
98
|
-
var _a, _b, _c, _d, _e, _f;
|
|
99
95
|
for (const [id, question] of Object.entries(questions)) {
|
|
100
96
|
if (question.type === "choice" && Object.keys(question.criteria).length > 255) {
|
|
101
97
|
throw new InvalidArgumentError({
|
|
@@ -111,7 +107,7 @@ var EvaluationTypeSafeAiModel = class _EvaluationTypeSafeAiModel {
|
|
|
111
107
|
}
|
|
112
108
|
}
|
|
113
109
|
const warnings = Object.keys(
|
|
114
|
-
|
|
110
|
+
providerOptions?.typesafe ?? {}
|
|
115
111
|
).map((option) => ({
|
|
116
112
|
type: "unsupported",
|
|
117
113
|
feature: `providerOptions.typesafe.${option}`
|
|
@@ -181,15 +177,15 @@ var EvaluationTypeSafeAiModel = class _EvaluationTypeSafeAiModel {
|
|
|
181
177
|
)
|
|
182
178
|
),
|
|
183
179
|
usage: {
|
|
184
|
-
inputTokens:
|
|
185
|
-
outputTokens:
|
|
180
|
+
inputTokens: response.usage?.input_tokens ?? void 0,
|
|
181
|
+
outputTokens: response.usage?.output_tokens ?? void 0
|
|
186
182
|
},
|
|
187
183
|
// The API rounds displayed probabilities and scores to two decimal places.
|
|
188
184
|
rounding: { probabilityDecimals: 2, scoreDecimals: 2 },
|
|
189
185
|
warnings,
|
|
190
186
|
providerMetadata: { typesafe: { confidence } },
|
|
191
187
|
response: {
|
|
192
|
-
modelId:
|
|
188
|
+
modelId: response.model ?? this.modelId,
|
|
193
189
|
headers: responseHeaders,
|
|
194
190
|
body: rawValue
|
|
195
191
|
}
|
|
@@ -199,8 +195,7 @@ var EvaluationTypeSafeAiModel = class _EvaluationTypeSafeAiModel {
|
|
|
199
195
|
|
|
200
196
|
// src/typesafe-ai-provider.ts
|
|
201
197
|
function createTypeSafeAi(options = {}) {
|
|
202
|
-
|
|
203
|
-
const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://api.typesafe.ai/v1";
|
|
198
|
+
const baseURL = withoutTrailingSlash(options.baseURL) ?? "https://api.typesafe.ai/v1";
|
|
204
199
|
const headers = () => withUserAgentSuffix2(
|
|
205
200
|
{
|
|
206
201
|
Authorization: `Bearer ${loadApiKey2({ apiKey: options.apiKey, environmentVariableName: "TYPESAFE_AI_API_KEY", description: "TypeSafe" })}`,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typesafe-ai-provider.ts","../src/typesafe-ai-evaluation-model.ts","../src/typesafe-ai-evaluation-api.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type Experimental_EvaluationModelV4 as EvaluationModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n EvaluationTypeSafeAiModel,\n type TypeSafeAiEvaluationModelId,\n} from './typesafe-ai-evaluation-model';\nimport { VERSION } from './version';\n\n/** TypeSafe's experimental evaluation capability, isolated from ProviderV4. */\nexport interface TypeSafeAiProvider extends ProviderV4 {\n evaluationModel(modelId: TypeSafeAiEvaluationModelId): EvaluationModelV4;\n}\n\nexport interface TypeSafeAiProviderSettings {\n /** API key. Defaults to the TYPESAFE_AI_API_KEY environment variable. */\n apiKey?: string;\n /** API base URL. Defaults to https://api.typesafe.ai/v1. */\n baseURL?: string;\n headers?: Record<string, string>;\n fetch?: FetchFunction;\n}\n\nexport function createTypeSafeAi(\n options: TypeSafeAiProviderSettings = {},\n): TypeSafeAiProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.typesafe.ai/v1';\n const headers = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({ apiKey: options.apiKey, environmentVariableName: 'TYPESAFE_AI_API_KEY', description: 'TypeSafe' })}`,\n ...options.headers,\n },\n `ai-sdk/typesafe-ai/${VERSION}`,\n );\n\n return {\n specificationVersion: 'v4',\n evaluationModel: modelId =>\n new EvaluationTypeSafeAiModel(modelId, {\n provider: 'typesafe.evaluation',\n baseURL,\n headers,\n fetch: options.fetch,\n }),\n languageModel: modelId => {\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n },\n embeddingModel: modelId => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n },\n imageModel: modelId => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n },\n };\n}\n\nexport const typeSafeAi = createTypeSafeAi();\n","import {\n InvalidArgumentError,\n type Experimental_EvaluationModelV4 as EvaluationModelV4,\n type Experimental_EvaluationModelV4Answer as EvaluationModelV4Answer,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n loadApiKey,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n withUserAgentSuffix,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n typesafeEvaluationResponseSchema,\n typesafeFailedResponseHandler,\n} from './typesafe-ai-evaluation-api';\nimport { VERSION } from './version';\n\nexport type TypeSafeAiEvaluationModelId = 'jev-latest' | (string & {});\n\ntype TypeSafeAiEvaluationModelConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n};\n\nexport class EvaluationTypeSafeAiModel implements EvaluationModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedQuestionTypes = ['choice', 'score', 'boolean'] as const;\n\n constructor(\n readonly modelId: TypeSafeAiEvaluationModelId,\n private readonly config: TypeSafeAiEvaluationModelConfig,\n ) {}\n\n get provider() {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: EvaluationTypeSafeAiModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: TypeSafeAiEvaluationModelId;\n config: TypeSafeAiEvaluationModelConfig;\n }) {\n return new EvaluationTypeSafeAiModel(options.modelId, options.config);\n }\n\n async doEvaluate({\n state,\n questions,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EvaluationModelV4['doEvaluate']>[0]): Promise<\n Awaited<ReturnType<EvaluationModelV4['doEvaluate']>>\n > {\n for (const [id, question] of Object.entries(questions)) {\n if (\n question.type === 'choice' &&\n Object.keys(question.criteria).length > 255\n ) {\n throw new InvalidArgumentError({\n argument: `questions.${id}.criteria`,\n message: 'TypeSafe Choice questions support at most 255 options.',\n });\n }\n if (question.type === 'score' && question.criteria.length > 10) {\n throw new InvalidArgumentError({\n argument: `questions.${id}.criteria`,\n message: 'TypeSafe Score questions support at most 10 levels.',\n });\n }\n }\n\n const warnings: SharedV4Warning[] = Object.keys(\n providerOptions?.typesafe ?? {},\n ).map(option => ({\n type: 'unsupported',\n feature: `providerOptions.typesafe.${option}`,\n }));\n const modelHeaders =\n this.config.headers === undefined\n ? withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({ apiKey: undefined, environmentVariableName: 'TYPESAFE_AI_API_KEY', description: 'TypeSafe' })}`,\n },\n `ai-sdk/typesafe-ai/${VERSION}`,\n )\n : await resolve(this.config.headers);\n const {\n value: response,\n rawValue,\n responseHeaders,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/systemone`,\n headers: combineHeaders(modelHeaders, headers),\n body: {\n model: this.modelId,\n state,\n questions: Object.fromEntries(\n Object.entries(questions).map(([id, question]) => [\n id,\n question.type === 'boolean'\n ? { ...question, type: 'noul' }\n : question,\n ]),\n ),\n },\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: typesafeFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n typesafeEvaluationResponseSchema,\n ),\n });\n\n const confidence = Object.fromEntries(\n Object.entries(response.answers).flatMap(([id, answer]) =>\n answer.type !== 'noul' && answer.confidence != null\n ? [[id, answer.confidence]]\n : [],\n ),\n );\n\n return {\n answers: Object.fromEntries(\n Object.entries(response.answers).map(\n ([id, answer]): [string, EvaluationModelV4Answer] => {\n switch (answer.type) {\n case 'noul':\n return [id, { type: 'boolean', probability: answer.noul }];\n case 'choice':\n return [\n id,\n {\n type: 'choice',\n choice: answer.choice,\n probabilities: answer.probabilities,\n },\n ];\n case 'score':\n return [\n id,\n {\n type: 'score',\n score: answer.score,\n probabilities: answer.probabilities,\n },\n ];\n }\n },\n ),\n ),\n usage: {\n inputTokens: response.usage?.input_tokens ?? undefined,\n outputTokens: response.usage?.output_tokens ?? undefined,\n },\n // The API rounds displayed probabilities and scores to two decimal places.\n rounding: { probabilityDecimals: 2, scoreDecimals: 2 },\n warnings,\n providerMetadata: { typesafe: { confidence } },\n response: {\n modelId: response.model ?? this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\n\n// Verified against the official SDK at 66880ccded6cb642dc1809620c2b108c33730214.\n// https://github.com/typesafe-ai/typesafe-sdk-js/blob/66880ccded6cb642dc1809620c2b108c33730214/src/types.ts\nexport const typesafeEvaluationResponseSchema = z.object({\n model: z.string().nullish(),\n answers: z.record(\n z.string(),\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('choice'),\n choice: z.string(),\n probabilities: z.record(z.string(), z.number()),\n confidence: z.number().nullish(),\n }),\n z.object({\n type: z.literal('score'),\n score: z.number(),\n probabilities: z.record(z.string(), z.number()),\n confidence: z.number().nullish(),\n }),\n z.object({ type: z.literal('noul'), noul: z.number() }),\n ]),\n ),\n usage: z\n .object({\n input_tokens: z.number().nullish(),\n output_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nexport const typesafeFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: z.object({\n message: z.string().nullish(),\n detail: z.unknown().nullish(),\n error: z\n .union([z.string(), z.object({ message: z.string().nullish() })])\n .nullish(),\n error_type: z.string().nullish(),\n }),\n errorToMessage: error =>\n error.message ??\n (typeof error.error === 'string' ? error.error : error.error?.message) ??\n (typeof error.detail === 'string'\n ? error.detail\n : JSON.stringify(error.detail)) ??\n error.error_type ??\n 'TypeSafe request failed',\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":["loadApiKey","withUserAgentSuffix","withUserAgentSuffix","loadApiKey"]}
|
|
1
|
+
{"version":3,"sources":["../src/typesafe-ai-provider.ts","../src/typesafe-ai-evaluation-model.ts","../src/typesafe-ai-evaluation-api.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type Experimental_EvaluationModelV4 as EvaluationModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n EvaluationTypeSafeAiModel,\n type TypeSafeAiEvaluationModelId,\n} from './typesafe-ai-evaluation-model';\nimport { VERSION } from './version';\n\n/** TypeSafe's experimental evaluation capability, isolated from ProviderV4. */\nexport interface TypeSafeAiProvider extends ProviderV4 {\n evaluationModel(modelId: TypeSafeAiEvaluationModelId): EvaluationModelV4;\n}\n\nexport interface TypeSafeAiProviderSettings {\n /** API key. Defaults to the TYPESAFE_AI_API_KEY environment variable. */\n apiKey?: string;\n /** API base URL. Defaults to https://api.typesafe.ai/v1. */\n baseURL?: string;\n headers?: Record<string, string>;\n fetch?: FetchFunction;\n}\n\nexport function createTypeSafeAi(\n options: TypeSafeAiProviderSettings = {},\n): TypeSafeAiProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.typesafe.ai/v1';\n const headers = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({ apiKey: options.apiKey, environmentVariableName: 'TYPESAFE_AI_API_KEY', description: 'TypeSafe' })}`,\n ...options.headers,\n },\n `ai-sdk/typesafe-ai/${VERSION}`,\n );\n\n return {\n specificationVersion: 'v4',\n evaluationModel: modelId =>\n new EvaluationTypeSafeAiModel(modelId, {\n provider: 'typesafe.evaluation',\n baseURL,\n headers,\n fetch: options.fetch,\n }),\n languageModel: modelId => {\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n },\n embeddingModel: modelId => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n },\n imageModel: modelId => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n },\n };\n}\n\nexport const typeSafeAi = createTypeSafeAi();\n","import {\n InvalidArgumentError,\n type Experimental_EvaluationModelV4 as EvaluationModelV4,\n type Experimental_EvaluationModelV4Answer as EvaluationModelV4Answer,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n loadApiKey,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n withUserAgentSuffix,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n typesafeEvaluationResponseSchema,\n typesafeFailedResponseHandler,\n} from './typesafe-ai-evaluation-api';\nimport { VERSION } from './version';\n\nexport type TypeSafeAiEvaluationModelId = 'jev-latest' | (string & {});\n\ntype TypeSafeAiEvaluationModelConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n};\n\nexport class EvaluationTypeSafeAiModel implements EvaluationModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedQuestionTypes = ['choice', 'score', 'boolean'] as const;\n\n constructor(\n readonly modelId: TypeSafeAiEvaluationModelId,\n private readonly config: TypeSafeAiEvaluationModelConfig,\n ) {}\n\n get provider() {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: EvaluationTypeSafeAiModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: TypeSafeAiEvaluationModelId;\n config: TypeSafeAiEvaluationModelConfig;\n }) {\n return new EvaluationTypeSafeAiModel(options.modelId, options.config);\n }\n\n async doEvaluate({\n state,\n questions,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EvaluationModelV4['doEvaluate']>[0]): Promise<\n Awaited<ReturnType<EvaluationModelV4['doEvaluate']>>\n > {\n for (const [id, question] of Object.entries(questions)) {\n if (\n question.type === 'choice' &&\n Object.keys(question.criteria).length > 255\n ) {\n throw new InvalidArgumentError({\n argument: `questions.${id}.criteria`,\n message: 'TypeSafe Choice questions support at most 255 options.',\n });\n }\n if (question.type === 'score' && question.criteria.length > 10) {\n throw new InvalidArgumentError({\n argument: `questions.${id}.criteria`,\n message: 'TypeSafe Score questions support at most 10 levels.',\n });\n }\n }\n\n const warnings: SharedV4Warning[] = Object.keys(\n providerOptions?.typesafe ?? {},\n ).map(option => ({\n type: 'unsupported',\n feature: `providerOptions.typesafe.${option}`,\n }));\n const modelHeaders =\n this.config.headers === undefined\n ? withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({ apiKey: undefined, environmentVariableName: 'TYPESAFE_AI_API_KEY', description: 'TypeSafe' })}`,\n },\n `ai-sdk/typesafe-ai/${VERSION}`,\n )\n : await resolve(this.config.headers);\n const {\n value: response,\n rawValue,\n responseHeaders,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/systemone`,\n headers: combineHeaders(modelHeaders, headers),\n body: {\n model: this.modelId,\n state,\n questions: Object.fromEntries(\n Object.entries(questions).map(([id, question]) => [\n id,\n question.type === 'boolean'\n ? { ...question, type: 'noul' }\n : question,\n ]),\n ),\n },\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: typesafeFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n typesafeEvaluationResponseSchema,\n ),\n });\n\n const confidence = Object.fromEntries(\n Object.entries(response.answers).flatMap(([id, answer]) =>\n answer.type !== 'noul' && answer.confidence != null\n ? [[id, answer.confidence]]\n : [],\n ),\n );\n\n return {\n answers: Object.fromEntries(\n Object.entries(response.answers).map(\n ([id, answer]): [string, EvaluationModelV4Answer] => {\n switch (answer.type) {\n case 'noul':\n return [id, { type: 'boolean', probability: answer.noul }];\n case 'choice':\n return [\n id,\n {\n type: 'choice',\n choice: answer.choice,\n probabilities: answer.probabilities,\n },\n ];\n case 'score':\n return [\n id,\n {\n type: 'score',\n score: answer.score,\n probabilities: answer.probabilities,\n },\n ];\n }\n },\n ),\n ),\n usage: {\n inputTokens: response.usage?.input_tokens ?? undefined,\n outputTokens: response.usage?.output_tokens ?? undefined,\n },\n // The API rounds displayed probabilities and scores to two decimal places.\n rounding: { probabilityDecimals: 2, scoreDecimals: 2 },\n warnings,\n providerMetadata: { typesafe: { confidence } },\n response: {\n modelId: response.model ?? this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\n\n// Verified against the official SDK at 66880ccded6cb642dc1809620c2b108c33730214.\n// https://github.com/typesafe-ai/typesafe-sdk-js/blob/66880ccded6cb642dc1809620c2b108c33730214/src/types.ts\nexport const typesafeEvaluationResponseSchema = z.object({\n model: z.string().nullish(),\n answers: z.record(\n z.string(),\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('choice'),\n choice: z.string(),\n probabilities: z.record(z.string(), z.number()),\n confidence: z.number().nullish(),\n }),\n z.object({\n type: z.literal('score'),\n score: z.number(),\n probabilities: z.record(z.string(), z.number()),\n confidence: z.number().nullish(),\n }),\n z.object({ type: z.literal('noul'), noul: z.number() }),\n ]),\n ),\n usage: z\n .object({\n input_tokens: z.number().nullish(),\n output_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nexport const typesafeFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: z.object({\n message: z.string().nullish(),\n detail: z.unknown().nullish(),\n error: z\n .union([z.string(), z.object({ message: z.string().nullish() })])\n .nullish(),\n error_type: z.string().nullish(),\n }),\n errorToMessage: error =>\n error.message ??\n (typeof error.error === 'string' ? error.error : error.error?.message) ??\n (typeof error.detail === 'string'\n ? error.detail\n : JSON.stringify(error.detail)) ??\n error.error_type ??\n 'TypeSafe request failed',\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":["loadApiKey","withUserAgentSuffix","withUserAgentSuffix","loadApiKey"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/typesafe-ai",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@ai-sdk/provider": "4.0.18",
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.49"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@ai-sdk/test-server": "2.0.
|
|
36
|
+
"@ai-sdk/test-server": "2.0.2",
|
|
37
37
|
"@types/node": "22.19.19",
|
|
38
38
|
"@vercel/ai-tsconfig": "0.0.0",
|
|
39
39
|
"tsup": "^8.5.1",
|