diff --git a/apis/cloudflare/package.json b/apis/cloudflare/package.json index 8ca2f898..33eb2483 100644 --- a/apis/cloudflare/package.json +++ b/apis/cloudflare/package.json @@ -24,6 +24,6 @@ "@opentelemetry/resources": "^1.18.1", "@opentelemetry/sdk-metrics": "^1.18.1", "dotenv": "^16.3.1", - "zod": "3.25.34" + "zod": "4.1.8" } } diff --git a/package.json b/package.json index 507dca31..808e545a 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,6 @@ }, "packageManager": "pnpm@8.15.5", "resolutions": { - "zod": "3.25.34" + "zod": "4.1.8" } } diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 2cb5c127..a5955e68 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -110,6 +110,6 @@ "jsonwebtoken": "^9.0.2", "openai": "4.104.0", "uuid": "^9.0.1", - "zod": "^3.25.34" + "zod": "4.1.8" } } diff --git a/packages/proxy/schema/models.ts b/packages/proxy/schema/models.ts index 1e0e8e08..d6f10d43 100644 --- a/packages/proxy/schema/models.ts +++ b/packages/proxy/schema/models.ts @@ -87,7 +87,9 @@ export const ModelSchema = z.object({ export type ModelSpec = z.infer; import modelListJson from "./model_list.json"; -const modelListJsonTyped = z.record(ModelSchema).parse(modelListJson); +const modelListJsonTyped = z + .record(z.string(), ModelSchema) + .parse(modelListJson); // Because this file can be included and bundled in various ways, it's important to // really inject these variables into the global scope, rather than let the bundler diff --git a/packages/proxy/schema/openai-realtime.ts b/packages/proxy/schema/openai-realtime.ts index c1a64c38..f6e48c4c 100644 --- a/packages/proxy/schema/openai-realtime.ts +++ b/packages/proxy/schema/openai-realtime.ts @@ -29,7 +29,7 @@ export const toolDefinitionTypeSchema = z.object({ type: z.literal("function").optional(), name: z.string(), description: z.string(), - parameters: z.record(z.unknown()), + parameters: z.record(z.string(), z.unknown()), }); export const sessionResourceTypeSchema = z.object({ diff --git a/packages/proxy/schema/secrets.ts b/packages/proxy/schema/secrets.ts index d5a9b401..aff3724a 100644 --- a/packages/proxy/schema/secrets.ts +++ b/packages/proxy/schema/secrets.ts @@ -4,7 +4,7 @@ import { ModelSchema } from "./models"; export const BaseMetadataSchema = z .object({ models: z.array(z.string()).nullish(), - customModels: z.record(ModelSchema).nullish(), + customModels: z.record(z.string(), ModelSchema).nullish(), excludeDefaultModels: z.boolean().nullish(), additionalHeaders: z.record(z.string(), z.string()).nullish(), supportsStreaming: z.boolean().default(true), @@ -88,7 +88,7 @@ const APISecretBaseSchema = z org_name: z.string().nullish(), name: z.string().nullish(), secret: z.string(), - metadata: z.record(z.unknown()).nullish(), + metadata: z.record(z.string(), z.unknown()).nullish(), }) .strict(); diff --git a/packages/proxy/src/generated_types.ts b/packages/proxy/src/generated_types.ts index efb2aacf..d65fb5dc 100644 --- a/packages/proxy/src/generated_types.ts +++ b/packages/proxy/src/generated_types.ts @@ -517,7 +517,7 @@ export const ExperimentEvent = z.object({ expected: z.unknown().optional(), error: z.unknown().optional(), scores: z - .union([z.record(z.union([z.number(), z.null()])), z.null()]) + .union([z.record(z.string(), z.union([z.number(), z.null()])), z.null()]) .optional(), metadata: z .union([ @@ -529,7 +529,7 @@ export const ExperimentEvent = z.object({ ]) .optional(), tags: z.union([z.array(z.string()), z.null()]).optional(), - metrics: z.union([z.record(z.number()), z.null()]).optional(), + metrics: z.union([z.record(z.string(), z.number()), z.null()]).optional(), context: z .union([ z @@ -648,7 +648,7 @@ export const PromptParserNullish = z.union([ z.object({ type: z.literal("llm_classifier"), use_cot: z.boolean(), - choice_scores: z.record(z.number().gte(0).lte(1)), + choice_scores: z.record(z.string(), z.number().gte(0).lte(1)), }), z.null(), ]); @@ -770,8 +770,8 @@ export const GraphEdge = z.object({ export type GraphEdgeType = z.infer; export const GraphData = z.object({ type: z.literal("graph"), - nodes: z.record(GraphNode), - edges: z.record(GraphEdge), + nodes: z.record(z.string(), GraphNode), + edges: z.record(z.string(), GraphEdge), }); export type GraphDataType = z.infer; export const FunctionData = z.union([ @@ -1122,7 +1122,7 @@ export const ProjectLogsEvent = z.object({ expected: z.unknown().optional(), error: z.unknown().optional(), scores: z - .union([z.record(z.union([z.number(), z.null()])), z.null()]) + .union([z.record(z.string(), z.union([z.number(), z.null()])), z.null()]) .optional(), metadata: z .union([ @@ -1134,7 +1134,7 @@ export const ProjectLogsEvent = z.object({ ]) .optional(), tags: z.union([z.array(z.string()), z.null()]).optional(), - metrics: z.union([z.record(z.number()), z.null()]).optional(), + metrics: z.union([z.record(z.string(), z.number()), z.null()]).optional(), context: z .union([ z @@ -1173,7 +1173,7 @@ export const ProjectScoreCategory = z.object({ export type ProjectScoreCategoryType = z.infer; export const ProjectScoreCategories = z.union([ z.array(ProjectScoreCategory), - z.record(z.number()), + z.record(z.string(), z.number()), z.array(z.string()), z.null(), ]); @@ -1416,7 +1416,7 @@ export const ViewOptions = z.union([ frameStart: z.union([z.string(), z.null()]), frameEnd: z.union([z.string(), z.null()]), tzUTC: z.union([z.boolean(), z.null()]), - chartVisibility: z.union([z.record(z.boolean()), z.null()]), + chartVisibility: z.union([z.record(z.string(), z.boolean()), z.null()]), projectId: z.union([z.string(), z.null()]), type: z.union([z.enum(["project", "experiment"]), z.null()]), groupBy: z.union([z.string(), z.null()]), @@ -1425,9 +1425,9 @@ export const ViewOptions = z.union([ }), z .object({ - columnVisibility: z.union([z.record(z.boolean()), z.null()]), + columnVisibility: z.union([z.record(z.string(), z.boolean()), z.null()]), columnOrder: z.union([z.array(z.string()), z.null()]), - columnSizing: z.union([z.record(z.number()), z.null()]), + columnSizing: z.union([z.record(z.string(), z.number()), z.null()]), grouping: z.union([z.string(), z.null()]), rowHeight: z.union([z.string(), z.null()]), tallGroupRows: z.union([z.boolean(), z.null()]), diff --git a/packages/proxy/types/anthropic.ts b/packages/proxy/types/anthropic.ts index 7f2ff5f4..243af6f7 100644 --- a/packages/proxy/types/anthropic.ts +++ b/packages/proxy/types/anthropic.ts @@ -50,7 +50,7 @@ const anthropicToolUseContentPartSchema = z.object({ type: z.literal("tool_use"), id: z.string(), name: z.string(), - input: z.record(z.any()), + input: z.record(z.string(), z.any()), cache_control: cacheControlSchema.optional(), }); @@ -58,7 +58,7 @@ const anthropicServerToolUseContentPartSchema = z.object({ type: z.literal("server_tool_use"), id: z.string(), name: z.enum(["web_search", "code_execution"]), - input: z.record(z.any()), + input: z.record(z.string(), z.any()), cache_control: cacheControlSchema.optional(), }); @@ -128,7 +128,7 @@ const anthropicMCPToolUseContentPartSchema = z.object({ type: z.literal("mcp_tool_use"), id: z.string(), name: z.string(), - input: z.record(z.any()), + input: z.record(z.string(), z.any()), server_name: z.string(), cache_control: cacheControlSchema.nullish(), }); @@ -144,7 +144,7 @@ const anthropicMCPToolResultContentPartSchema = z.object({ type: z.literal("text"), text: z.string(), // This is a simplification of the strict citation schema - citations: z.array(z.record(z.any())).nullish(), + citations: z.array(z.record(z.string(), z.any())).nullish(), cache_control: cacheControlSchema.nullish(), }), ), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5081f92c..cda76796 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - zod: 3.25.34 + zod: 4.1.8 importers: @@ -43,13 +43,13 @@ importers: version: 1.19.0(@opentelemetry/api@1.7.0) braintrust: specifier: ^0.3.7 - version: 0.3.7(zod@3.25.34) + version: 0.3.7(zod@4.1.8) dotenv: specifier: ^16.3.1 version: 16.3.1 zod: - specifier: 3.25.34 - version: 3.25.34 + specifier: 4.1.8 + version: 4.1.8 devDependencies: '@cloudflare/workers-types': specifier: ^4.20241022.0 @@ -107,7 +107,7 @@ importers: version: 4.19.2 openai: specifier: ^4.104.0 - version: 4.104.0(zod@3.25.34) + version: 4.104.0(zod@4.1.8) redis: specifier: ^4.6.8 version: 4.6.8 @@ -244,13 +244,13 @@ importers: version: 9.0.2 openai: specifier: 4.104.0 - version: 4.104.0(zod@3.25.34) + version: 4.104.0(zod@4.1.8) uuid: specifier: ^9.0.1 version: 9.0.1 zod: - specifier: 3.25.34 - version: 3.25.34 + specifier: 4.1.8 + version: 4.1.8 devDependencies: '@types/content-disposition': specifier: ^0.5.8 @@ -2274,8 +2274,8 @@ packages: dependencies: google-auth-library: 9.15.1 ws: 8.18.0 - zod: 3.25.34 - zod-to-json-schema: 3.23.5(zod@3.25.34) + zod: 4.1.8 + zod-to-json-schema: 3.23.5(zod@4.1.8) transitivePeerDependencies: - bufferutil - encoding @@ -4395,14 +4395,14 @@ packages: resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} dev: false - /@zodios/core@10.9.6(axios@1.11.0)(zod@3.25.34): + /@zodios/core@10.9.6(axios@1.11.0)(zod@4.1.8): resolution: {integrity: sha512-aH4rOdb3AcezN7ws8vDgBfGboZMk2JGGzEq/DtW65MhnRxyTGRuLJRWVQ/2KxDgWvV2F5oTkAS+5pnjKbl0n+A==} peerDependencies: axios: ^0.x || ^1.0.0 - zod: 3.25.34 + zod: 4.1.8 dependencies: axios: 1.11.0 - zod: 3.25.34 + zod: 4.1.8 dev: true /abbrev@1.1.1: @@ -4928,11 +4928,11 @@ packages: fill-range: 7.1.1 dev: true - /braintrust@0.3.7(zod@3.25.34): + /braintrust@0.3.7(zod@4.1.8): resolution: {integrity: sha512-P6nJLgM98IOiBvAsgfUn9dbrLhmTfvED/+2ouacImTgs9adlZoGrIib9BkRAm+keSTfKLBPFqMmUi7QZ4ClemQ==} hasBin: true peerDependencies: - zod: 3.25.34 + zod: 4.1.8 dependencies: '@ai-sdk/provider': 1.1.3 '@next/env': 14.2.3 @@ -4954,8 +4954,8 @@ packages: slugify: 1.6.6 source-map: 0.7.4 uuid: 9.0.1 - zod: 3.25.34 - zod-to-json-schema: 3.23.5(zod@3.25.34) + zod: 4.1.8 + zod-to-json-schema: 3.23.5(zod@4.1.8) transitivePeerDependencies: - '@aws-sdk/credential-provider-web-identity' - supports-color @@ -7950,7 +7950,7 @@ packages: workerd: 1.20250129.0 ws: 8.18.0 youch: 3.3.4 - zod: 3.25.34 + zod: 4.1.8 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -8352,12 +8352,12 @@ packages: mimic-fn: 2.1.0 dev: true - /openai@4.104.0(zod@3.25.34): + /openai@4.104.0(zod@4.1.8): resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} hasBin: true peerDependencies: ws: ^8.18.0 - zod: 3.25.34 + zod: 4.1.8 peerDependenciesMeta: ws: optional: true @@ -8371,7 +8371,7 @@ packages: form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.7.0 - zod: 3.25.34 + zod: 4.1.8 transitivePeerDependencies: - encoding dev: false @@ -8386,7 +8386,7 @@ packages: dependencies: '@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3) '@liuli-util/fs-extra': 0.1.0 - '@zodios/core': 10.9.6(axios@1.11.0)(zod@3.25.34) + '@zodios/core': 10.9.6(axios@1.11.0)(zod@4.1.8) axios: 1.11.0 cac: 6.7.14 handlebars: 4.7.8 @@ -8397,7 +8397,7 @@ packages: tanu: 0.1.13 ts-pattern: 5.8.0 whence: 2.1.0 - zod: 3.25.34 + zod: 4.1.8 transitivePeerDependencies: - debug - react @@ -11036,16 +11036,16 @@ packages: stacktracey: 2.1.8 dev: true - /zod-to-json-schema@3.23.5(zod@3.25.34): + /zod-to-json-schema@3.23.5(zod@4.1.8): resolution: {integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==} peerDependencies: - zod: 3.25.34 + zod: 4.1.8 dependencies: - zod: 3.25.34 + zod: 4.1.8 dev: false - /zod@3.25.34: - resolution: {integrity: sha512-lZHvSc2PpWdcfpHlyB33HA9nqP16GpC9IpiG4lYq9jZCJVLZNnWd6Y1cj79bcLSBKTkxepfpjckPv5Y5VOPlwA==} + /zod@4.1.8: + resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==} github.com/openai/openai-realtime-api-beta/cd8a9251dcfb0cba0d7b0501e9ff36c915f5090f: resolution: {tarball: https://codeload.github.com/openai/openai-realtime-api-beta/tar.gz/cd8a9251dcfb0cba0d7b0501e9ff36c915f5090f}