@deepthonk/providers 0.1.4 → 0.1.5

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.
@@ -0,0 +1,279 @@
1
+ import { z } from "zod";
2
+ import type { ProviderConfig } from "./types.js";
3
+ export declare const providerReplaySchema: z.ZodObject<{
4
+ provider: z.ZodString;
5
+ baseUrl: z.ZodOptional<z.ZodString>;
6
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
7
+ supportsJsonMode: z.ZodDefault<z.ZodBoolean>;
8
+ models: z.ZodObject<{
9
+ generator: z.ZodString;
10
+ mutator: z.ZodString;
11
+ judge: z.ZodString;
12
+ finalizer: z.ZodOptional<z.ZodString>;
13
+ }, "strict", z.ZodTypeAny, {
14
+ generator: string;
15
+ mutator: string;
16
+ judge: string;
17
+ finalizer?: string | undefined;
18
+ }, {
19
+ generator: string;
20
+ mutator: string;
21
+ judge: string;
22
+ finalizer?: string | undefined;
23
+ }>;
24
+ roleProviders: z.ZodOptional<z.ZodObject<{
25
+ generator: z.ZodOptional<z.ZodObject<{
26
+ provider: z.ZodString;
27
+ baseUrl: z.ZodOptional<z.ZodString>;
28
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
29
+ model: z.ZodString;
30
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
31
+ }, "strict", z.ZodTypeAny, {
32
+ model: string;
33
+ provider: string;
34
+ baseUrl?: string | undefined;
35
+ apiKeyEnv?: string | undefined;
36
+ supportsJsonMode?: boolean | undefined;
37
+ }, {
38
+ model: string;
39
+ provider: string;
40
+ baseUrl?: string | undefined;
41
+ apiKeyEnv?: string | undefined;
42
+ supportsJsonMode?: boolean | undefined;
43
+ }>>;
44
+ mutator: z.ZodOptional<z.ZodObject<{
45
+ provider: z.ZodString;
46
+ baseUrl: z.ZodOptional<z.ZodString>;
47
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
48
+ model: z.ZodString;
49
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
50
+ }, "strict", z.ZodTypeAny, {
51
+ model: string;
52
+ provider: string;
53
+ baseUrl?: string | undefined;
54
+ apiKeyEnv?: string | undefined;
55
+ supportsJsonMode?: boolean | undefined;
56
+ }, {
57
+ model: string;
58
+ provider: string;
59
+ baseUrl?: string | undefined;
60
+ apiKeyEnv?: string | undefined;
61
+ supportsJsonMode?: boolean | undefined;
62
+ }>>;
63
+ judge: z.ZodOptional<z.ZodObject<{
64
+ provider: z.ZodString;
65
+ baseUrl: z.ZodOptional<z.ZodString>;
66
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
67
+ model: z.ZodString;
68
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
69
+ }, "strict", z.ZodTypeAny, {
70
+ model: string;
71
+ provider: string;
72
+ baseUrl?: string | undefined;
73
+ apiKeyEnv?: string | undefined;
74
+ supportsJsonMode?: boolean | undefined;
75
+ }, {
76
+ model: string;
77
+ provider: string;
78
+ baseUrl?: string | undefined;
79
+ apiKeyEnv?: string | undefined;
80
+ supportsJsonMode?: boolean | undefined;
81
+ }>>;
82
+ finalizer: z.ZodOptional<z.ZodObject<{
83
+ provider: z.ZodString;
84
+ baseUrl: z.ZodOptional<z.ZodString>;
85
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
86
+ model: z.ZodString;
87
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
88
+ }, "strict", z.ZodTypeAny, {
89
+ model: string;
90
+ provider: string;
91
+ baseUrl?: string | undefined;
92
+ apiKeyEnv?: string | undefined;
93
+ supportsJsonMode?: boolean | undefined;
94
+ }, {
95
+ model: string;
96
+ provider: string;
97
+ baseUrl?: string | undefined;
98
+ apiKeyEnv?: string | undefined;
99
+ supportsJsonMode?: boolean | undefined;
100
+ }>>;
101
+ }, "strict", z.ZodTypeAny, {
102
+ generator?: {
103
+ model: string;
104
+ provider: string;
105
+ baseUrl?: string | undefined;
106
+ apiKeyEnv?: string | undefined;
107
+ supportsJsonMode?: boolean | undefined;
108
+ } | undefined;
109
+ mutator?: {
110
+ model: string;
111
+ provider: string;
112
+ baseUrl?: string | undefined;
113
+ apiKeyEnv?: string | undefined;
114
+ supportsJsonMode?: boolean | undefined;
115
+ } | undefined;
116
+ judge?: {
117
+ model: string;
118
+ provider: string;
119
+ baseUrl?: string | undefined;
120
+ apiKeyEnv?: string | undefined;
121
+ supportsJsonMode?: boolean | undefined;
122
+ } | undefined;
123
+ finalizer?: {
124
+ model: string;
125
+ provider: string;
126
+ baseUrl?: string | undefined;
127
+ apiKeyEnv?: string | undefined;
128
+ supportsJsonMode?: boolean | undefined;
129
+ } | undefined;
130
+ }, {
131
+ generator?: {
132
+ model: string;
133
+ provider: string;
134
+ baseUrl?: string | undefined;
135
+ apiKeyEnv?: string | undefined;
136
+ supportsJsonMode?: boolean | undefined;
137
+ } | undefined;
138
+ mutator?: {
139
+ model: string;
140
+ provider: string;
141
+ baseUrl?: string | undefined;
142
+ apiKeyEnv?: string | undefined;
143
+ supportsJsonMode?: boolean | undefined;
144
+ } | undefined;
145
+ judge?: {
146
+ model: string;
147
+ provider: string;
148
+ baseUrl?: string | undefined;
149
+ apiKeyEnv?: string | undefined;
150
+ supportsJsonMode?: boolean | undefined;
151
+ } | undefined;
152
+ finalizer?: {
153
+ model: string;
154
+ provider: string;
155
+ baseUrl?: string | undefined;
156
+ apiKeyEnv?: string | undefined;
157
+ supportsJsonMode?: boolean | undefined;
158
+ } | undefined;
159
+ }>>;
160
+ samplingPreferences: z.ZodOptional<z.ZodObject<{
161
+ modelHints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
162
+ costPriority: z.ZodOptional<z.ZodNumber>;
163
+ speedPriority: z.ZodOptional<z.ZodNumber>;
164
+ intelligencePriority: z.ZodOptional<z.ZodNumber>;
165
+ }, "strict", z.ZodTypeAny, {
166
+ costPriority?: number | undefined;
167
+ speedPriority?: number | undefined;
168
+ intelligencePriority?: number | undefined;
169
+ modelHints?: string[] | undefined;
170
+ }, {
171
+ costPriority?: number | undefined;
172
+ speedPriority?: number | undefined;
173
+ intelligencePriority?: number | undefined;
174
+ modelHints?: string[] | undefined;
175
+ }>>;
176
+ routeFingerprint: z.ZodOptional<z.ZodString>;
177
+ }, "strict", z.ZodTypeAny, {
178
+ provider: string;
179
+ models: {
180
+ generator: string;
181
+ mutator: string;
182
+ judge: string;
183
+ finalizer?: string | undefined;
184
+ };
185
+ supportsJsonMode: boolean;
186
+ routeFingerprint?: string | undefined;
187
+ baseUrl?: string | undefined;
188
+ apiKeyEnv?: string | undefined;
189
+ roleProviders?: {
190
+ generator?: {
191
+ model: string;
192
+ provider: string;
193
+ baseUrl?: string | undefined;
194
+ apiKeyEnv?: string | undefined;
195
+ supportsJsonMode?: boolean | undefined;
196
+ } | undefined;
197
+ mutator?: {
198
+ model: string;
199
+ provider: string;
200
+ baseUrl?: string | undefined;
201
+ apiKeyEnv?: string | undefined;
202
+ supportsJsonMode?: boolean | undefined;
203
+ } | undefined;
204
+ judge?: {
205
+ model: string;
206
+ provider: string;
207
+ baseUrl?: string | undefined;
208
+ apiKeyEnv?: string | undefined;
209
+ supportsJsonMode?: boolean | undefined;
210
+ } | undefined;
211
+ finalizer?: {
212
+ model: string;
213
+ provider: string;
214
+ baseUrl?: string | undefined;
215
+ apiKeyEnv?: string | undefined;
216
+ supportsJsonMode?: boolean | undefined;
217
+ } | undefined;
218
+ } | undefined;
219
+ samplingPreferences?: {
220
+ costPriority?: number | undefined;
221
+ speedPriority?: number | undefined;
222
+ intelligencePriority?: number | undefined;
223
+ modelHints?: string[] | undefined;
224
+ } | undefined;
225
+ }, {
226
+ provider: string;
227
+ models: {
228
+ generator: string;
229
+ mutator: string;
230
+ judge: string;
231
+ finalizer?: string | undefined;
232
+ };
233
+ routeFingerprint?: string | undefined;
234
+ baseUrl?: string | undefined;
235
+ apiKeyEnv?: string | undefined;
236
+ supportsJsonMode?: boolean | undefined;
237
+ roleProviders?: {
238
+ generator?: {
239
+ model: string;
240
+ provider: string;
241
+ baseUrl?: string | undefined;
242
+ apiKeyEnv?: string | undefined;
243
+ supportsJsonMode?: boolean | undefined;
244
+ } | undefined;
245
+ mutator?: {
246
+ model: string;
247
+ provider: string;
248
+ baseUrl?: string | undefined;
249
+ apiKeyEnv?: string | undefined;
250
+ supportsJsonMode?: boolean | undefined;
251
+ } | undefined;
252
+ judge?: {
253
+ model: string;
254
+ provider: string;
255
+ baseUrl?: string | undefined;
256
+ apiKeyEnv?: string | undefined;
257
+ supportsJsonMode?: boolean | undefined;
258
+ } | undefined;
259
+ finalizer?: {
260
+ model: string;
261
+ provider: string;
262
+ baseUrl?: string | undefined;
263
+ apiKeyEnv?: string | undefined;
264
+ supportsJsonMode?: boolean | undefined;
265
+ } | undefined;
266
+ } | undefined;
267
+ samplingPreferences?: {
268
+ costPriority?: number | undefined;
269
+ speedPriority?: number | undefined;
270
+ intelligencePriority?: number | undefined;
271
+ modelHints?: string[] | undefined;
272
+ } | undefined;
273
+ }>;
274
+ export type ProviderReplay = z.infer<typeof providerReplaySchema>;
275
+ export declare function providerReplayFromConfig(config: ProviderConfig): ProviderReplay;
276
+ export declare function parseProviderReplay(value: unknown): ProviderReplay | undefined;
277
+ export declare function providerConfigFromReplay(replay: ProviderReplay, retry?: ProviderConfig["retry"]): ProviderConfig;
278
+ export declare function providerRouteFingerprint(replay: Omit<ProviderReplay, "routeFingerprint"> | ProviderReplay): string;
279
+ export declare function assertProviderReplayFingerprint(replay: ProviderReplay): void;
@@ -0,0 +1,184 @@
1
+ import { createHash } from "node:crypto";
2
+ import { ConfigError } from "@deepthonk/core";
3
+ import { z } from "zod";
4
+ import { resolveProviderConfig } from "./defaults.js";
5
+ const providerRoles = ["generator", "mutator", "judge", "finalizer"];
6
+ const providerReplayRoleSchema = z.object({
7
+ provider: z.string().min(1),
8
+ baseUrl: z.string().optional(),
9
+ apiKeyEnv: z.string().optional(),
10
+ model: z.string().min(1),
11
+ supportsJsonMode: z.boolean().optional()
12
+ }).strict();
13
+ export const providerReplaySchema = z.object({
14
+ provider: z.string().min(1),
15
+ baseUrl: z.string().optional(),
16
+ apiKeyEnv: z.string().optional(),
17
+ supportsJsonMode: z.boolean().default(true),
18
+ models: z.object({
19
+ generator: z.string().min(1),
20
+ mutator: z.string().min(1),
21
+ judge: z.string().min(1),
22
+ finalizer: z.string().min(1).optional()
23
+ }).strict(),
24
+ roleProviders: z
25
+ .object({
26
+ generator: providerReplayRoleSchema.optional(),
27
+ mutator: providerReplayRoleSchema.optional(),
28
+ judge: providerReplayRoleSchema.optional(),
29
+ finalizer: providerReplayRoleSchema.optional()
30
+ })
31
+ .strict()
32
+ .optional(),
33
+ samplingPreferences: z
34
+ .object({
35
+ modelHints: z.array(z.string().min(1)).optional(),
36
+ costPriority: z.number().min(0).max(1).optional(),
37
+ speedPriority: z.number().min(0).max(1).optional(),
38
+ intelligencePriority: z.number().min(0).max(1).optional()
39
+ })
40
+ .strict()
41
+ .optional(),
42
+ routeFingerprint: z.string().regex(/^sha256:[a-f0-9]{64}$/).optional()
43
+ }).strict();
44
+ export function providerReplayFromConfig(config) {
45
+ const replay = {
46
+ provider: config.provider,
47
+ baseUrl: config.baseUrl,
48
+ apiKeyEnv: config.apiKeyEnv,
49
+ supportsJsonMode: config.supportsJsonMode ?? true,
50
+ models: compactObject({
51
+ generator: config.models.generator,
52
+ mutator: config.models.mutator,
53
+ judge: config.models.judge,
54
+ finalizer: config.models.finalizer
55
+ })
56
+ };
57
+ const roleProviders = replayRoleProviders(config);
58
+ if (roleProviders)
59
+ replay.roleProviders = roleProviders;
60
+ const samplingPreferences = compactObject({
61
+ modelHints: config.modelHints,
62
+ costPriority: config.costPriority,
63
+ speedPriority: config.speedPriority,
64
+ intelligencePriority: config.intelligencePriority
65
+ });
66
+ if (Object.keys(samplingPreferences).length > 0) {
67
+ replay.samplingPreferences = samplingPreferences;
68
+ }
69
+ replay.routeFingerprint = providerRouteFingerprint(replay);
70
+ return replay;
71
+ }
72
+ export function parseProviderReplay(value) {
73
+ if (value === undefined)
74
+ return undefined;
75
+ const parsed = providerReplaySchema.safeParse(value);
76
+ if (!parsed.success) {
77
+ throw invalidReplay(`Stored provider replay is invalid: ${parsed.error.issues.map((issue) => `${issue.path.join(".") || "root"}: ${issue.message}`).join("; ")}`);
78
+ }
79
+ assertProviderReplayFingerprint(parsed.data);
80
+ return parsed.data;
81
+ }
82
+ export function providerConfigFromReplay(replay, retry) {
83
+ assertProviderReplayFingerprint(replay);
84
+ return resolveProviderConfig({
85
+ provider: replay.provider,
86
+ routeFingerprint: replay.routeFingerprint,
87
+ baseUrl: replay.baseUrl,
88
+ apiKeyEnv: replay.apiKeyEnv,
89
+ supportsJsonMode: replay.supportsJsonMode,
90
+ models: replay.models,
91
+ roleProviders: replay.roleProviders,
92
+ retry,
93
+ modelHints: replay.samplingPreferences?.modelHints,
94
+ costPriority: replay.samplingPreferences?.costPriority,
95
+ speedPriority: replay.samplingPreferences?.speedPriority,
96
+ intelligencePriority: replay.samplingPreferences?.intelligencePriority
97
+ });
98
+ }
99
+ export function providerRouteFingerprint(replay) {
100
+ const roles = Object.fromEntries(providerRoles.flatMap((role) => {
101
+ const route = replay.roleProviders?.[role];
102
+ return route
103
+ ? [[role, routeFingerprintValue(route.provider, route.baseUrl, route.apiKeyEnv, route.model, route.supportsJsonMode)]]
104
+ : [];
105
+ }));
106
+ const fingerprintValue = {
107
+ base: routeFingerprintValue(replay.provider, replay.baseUrl, replay.apiKeyEnv, replay.models, replay.supportsJsonMode),
108
+ roles,
109
+ samplingPreferences: replay.samplingPreferences ?? null
110
+ };
111
+ return `sha256:${createHash("sha256").update(stableJson(fingerprintValue)).digest("hex")}`;
112
+ }
113
+ export function assertProviderReplayFingerprint(replay) {
114
+ if (replay.routeFingerprint && replay.routeFingerprint !== providerRouteFingerprint(replay)) {
115
+ throw invalidReplay("Stored provider replay route fingerprint does not match its provider route fields.");
116
+ }
117
+ }
118
+ function replayRoleProviders(config) {
119
+ if (!config.roleProviders)
120
+ return undefined;
121
+ const entries = providerRoles.flatMap((role) => {
122
+ const roleConfig = config.roleProviders?.[role];
123
+ if (!roleConfig)
124
+ return [];
125
+ return [
126
+ [
127
+ role,
128
+ compactObject({
129
+ provider: roleConfig.provider,
130
+ baseUrl: roleConfig.baseUrl,
131
+ apiKeyEnv: roleConfig.apiKeyEnv,
132
+ model: roleConfig.model,
133
+ supportsJsonMode: roleConfig.supportsJsonMode
134
+ })
135
+ ]
136
+ ];
137
+ });
138
+ return entries.length ? Object.fromEntries(entries) : undefined;
139
+ }
140
+ function compactObject(value) {
141
+ return Object.fromEntries(Object.entries(value).filter(([, entryValue]) => entryValue !== undefined));
142
+ }
143
+ function routeFingerprintValue(provider, baseUrl, apiKeyEnv, model, supportsJsonMode) {
144
+ return compactObject({
145
+ provider,
146
+ baseUrl: normalizeFingerprintUrl(baseUrl),
147
+ apiKeyEnv,
148
+ model,
149
+ supportsJsonMode
150
+ });
151
+ }
152
+ function normalizeFingerprintUrl(baseUrl) {
153
+ if (!baseUrl)
154
+ return undefined;
155
+ try {
156
+ const parsed = new URL(baseUrl);
157
+ parsed.hash = "";
158
+ parsed.hostname = parsed.hostname.toLowerCase();
159
+ parsed.pathname = parsed.pathname.replace(/\/+$/, "");
160
+ return parsed.toString().replace(/\/$/, "");
161
+ }
162
+ catch {
163
+ return baseUrl.replace(/\/+$/, "");
164
+ }
165
+ }
166
+ function stableJson(value) {
167
+ if (Array.isArray(value))
168
+ return `[${value.map(stableJson).join(",")}]`;
169
+ if (value && typeof value === "object") {
170
+ const entries = Object.entries(value)
171
+ .sort(([left], [right]) => left.localeCompare(right))
172
+ .map(([key, inner]) => `${JSON.stringify(key)}:${stableJson(inner)}`);
173
+ return `{${entries.join(",")}}`;
174
+ }
175
+ return JSON.stringify(value) ?? "null";
176
+ }
177
+ function invalidReplay(message) {
178
+ return new ConfigError(message, {
179
+ code: "provider.replay_route_mismatch",
180
+ retryable: false,
181
+ fix: "Resume with the original provider route, or explicitly select a complete replacement route instead of editing config.json."
182
+ });
183
+ }
184
+ //# sourceMappingURL=providerReplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerReplay.js","sourceRoot":"","sources":["../src/providerReplay.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  import type { ModelDriver, ProviderConfig } from "./types.js";
2
2
  export declare function createDriver(config: ProviderConfig): ModelDriver;
3
+ /** Route-only driver for validation and dry-run planning; every model method refuses execution. */
4
+ export declare function createDriverIdentity(config: ProviderConfig): ModelDriver;
package/dist/registry.js CHANGED
@@ -4,9 +4,47 @@ import { ConfigError, ProviderError } from "@deepthonk/core";
4
4
  import { SamplingDriver } from "./sampling.js";
5
5
  export function createDriver(config) {
6
6
  const baseDriver = createSingleDriver({ ...config, roleProviders: undefined });
7
- if (config.roleProviders)
8
- return new RoleRoutingDriver(baseDriver, config.roleProviders);
9
- return baseDriver;
7
+ const driver = config.roleProviders ? new RoleRoutingDriver(baseDriver, config.roleProviders) : baseDriver;
8
+ if (config.routeFingerprint) {
9
+ Object.defineProperty(driver, "routeFingerprint", { value: config.routeFingerprint, enumerable: false });
10
+ }
11
+ return driver;
12
+ }
13
+ /** Route-only driver for validation and dry-run planning; every model method refuses execution. */
14
+ export function createDriverIdentity(config) {
15
+ const unavailable = async () => {
16
+ throw new ConfigError("A route-identity driver cannot make model calls.", {
17
+ code: "provider.identity_driver_call",
18
+ retryable: false,
19
+ fix: "Construct a real provider driver before executing the run."
20
+ });
21
+ };
22
+ const identity = {
23
+ provider: config.provider,
24
+ baseUrl: config.baseUrl,
25
+ routeFingerprint: config.routeFingerprint,
26
+ generate: unavailable,
27
+ compare: unavailable,
28
+ mutate: unavailable,
29
+ finalize: unavailable
30
+ };
31
+ if (config.roleProviders) {
32
+ identity.routes = Object.fromEntries(Object.entries(config.roleProviders).map(([role, route]) => [
33
+ role,
34
+ {
35
+ driver: {
36
+ provider: route.provider,
37
+ baseUrl: route.baseUrl,
38
+ generate: unavailable,
39
+ compare: unavailable,
40
+ mutate: unavailable,
41
+ finalize: unavailable
42
+ },
43
+ model: route.model
44
+ }
45
+ ]));
46
+ }
47
+ return identity;
10
48
  }
11
49
  function createSingleDriver(config) {
12
50
  if (config.provider === "fake")
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}