@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.
- package/README.md +9 -6
- package/dist/defaults.d.ts +9 -0
- package/dist/defaults.js +14 -5
- package/dist/defaults.js.map +1 -1
- package/dist/externalConfig.d.ts +63 -0
- package/dist/externalConfig.js +266 -0
- package/dist/externalConfig.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/openaiCompatible.d.ts +4 -1
- package/dist/openaiCompatible.js +254 -90
- package/dist/openaiCompatible.js.map +1 -1
- package/dist/profileRegistry.js +4 -2
- package/dist/profileRegistry.js.map +1 -1
- package/dist/providerReplay.d.ts +279 -0
- package/dist/providerReplay.js +184 -0
- package/dist/providerReplay.js.map +1 -0
- package/dist/registry.d.ts +2 -0
- package/dist/registry.js +41 -3
- package/dist/registry.js.map +1 -1
- package/dist/sampling.js +58 -11
- package/dist/sampling.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -70,7 +70,7 @@ deepthonk plan --config ~/.config/deepthonk/config.yaml
|
|
|
70
70
|
deepthonk run --task task.md --config ~/.config/deepthonk/config.yaml --profile quick --dry-run
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
Start with `--profile quick` and consider `--max-concurrency`, `--max-input-tokens`, `--max-output-tokens`, `--max-usd`, and `--request-timeout-ms` before larger paid profiles.
|
|
73
|
+
Start with `--profile quick` and consider `--max-concurrency`, `--max-calls`, `--max-input-tokens`, `--max-output-tokens`, `--max-usd`, and `--request-timeout-ms` before larger paid profiles. `max_calls` is reserved before dispatch and counts logical model invocations, including failed calls and invalid-JSON retries; provider-internal HTTP retries are reported separately. Token/USD totals are known only after responses and can overshoot by at most the active concurrency window. Plans keep nominal `calls` separate from finalizer and retry headroom in `worst_case_calls`.
|
|
74
74
|
|
|
75
75
|
## OpenAI-Compatible Providers
|
|
76
76
|
|
|
@@ -111,7 +111,7 @@ The MCP server exposes the same engine the CLI runs. Once wired into an MCP host
|
|
|
111
111
|
|
|
112
112
|
Provider API keys come from the host process's environment, not from DeepThonk's config alone. Each host handles env passthrough slightly differently — see the concrete patterns below.
|
|
113
113
|
|
|
114
|
-
MCP Sampling is supported as `provider: "sampling"` when the connected host advertises the MCP sampling capability. Sampling
|
|
114
|
+
MCP Sampling is supported over stdio as `provider: "sampling"` when the connected host advertises the MCP sampling capability. The v0.1 patch line rejects Sampling over Streamable HTTP and all mixed Sampling/direct role routes; use a direct provider there. Sampling is not available from standalone CLI runs.
|
|
115
115
|
|
|
116
116
|
### Claude Code
|
|
117
117
|
|
|
@@ -177,7 +177,7 @@ For local web hosts, or when stdio isn't available:
|
|
|
177
177
|
deepthonk serve-mcp --transport http --port 3333
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
-
The server binds `127.0.0.1:3333` only
|
|
180
|
+
The server binds `127.0.0.1:3333` only and exposes stateful `POST`, `GET`, and `DELETE` at `http://127.0.0.1:3333/mcp`. Sessions use cryptographic IDs, expire after 30 idle minutes when no request is active, and are capped at 64. DNS rebinding protection is on (CVE-2025-66414): requests with `Host` headers outside `127.0.0.1:3333` / `localhost:3333` are rejected. The wrapper also rejects non-JSON POSTs, non-loopback `Origin` headers, and `Sec-Fetch-Site: cross-site` before reading the body. It has no bearer auth. Do not expose this port through a reverse proxy without re-evaluating that trust boundary.
|
|
181
181
|
|
|
182
182
|
### Tools
|
|
183
183
|
|
|
@@ -188,6 +188,8 @@ The server binds `127.0.0.1:3333` only (loopback) and the endpoint is `POST http
|
|
|
188
188
|
| `deepthonk.status` | Poll job status from a `run_dir`. |
|
|
189
189
|
| `deepthonk.result` | Return final summary + winner once a job is complete. |
|
|
190
190
|
| `deepthonk.cancel` | Request cancellation by writing `cancel.json` into the run directory. |
|
|
191
|
+
| `deepthonk.lock_inspect` / `deepthonk.lock_reclaim` | Inspect lock ownership and explicitly reclaim only an exact fingerprint. |
|
|
192
|
+
| `deepthonk.repair_budget` | Replace legacy `[redacted]` numeric budget fields with explicit original values. |
|
|
191
193
|
| `deepthonk.run` | Blocking convenience: start + await completion in one call. Prefer `start` + polling for long-running jobs. |
|
|
192
194
|
| `deepthonk.rank` | Rank a user-supplied candidate set with pairwise judging + Bradley-Terry (skip generation). |
|
|
193
195
|
| `deepthonk.mutate` | Mutate one supplied candidate with critique (one-shot). |
|
|
@@ -211,6 +213,7 @@ All tools accept inline provider/model fields, or `config_path` pointing at a De
|
|
|
211
213
|
- `deepthonk://runs/{run_id}/status` — run state (JSON).
|
|
212
214
|
- `deepthonk://jobs/{job_id}/{status|result|config|candidates|comparisons|scores|usage|trace|final|winner}?run_dir=...` — job-scoped lookup; the `run_dir` query param is required.
|
|
213
215
|
- `deepthonk://jobs/{job_id}/population/{generation}?run_dir=...` — job-scoped population snapshots before or after completion.
|
|
216
|
+
- `deepthonk://runs/{run_id}/{resource}/page/{cursor}` and job equivalents — opaque bounded pages. Whole reads are limited to 1 MiB; pages contain at most 1,000 records and 1 MiB.
|
|
214
217
|
|
|
215
218
|
### Prompts
|
|
216
219
|
|
|
@@ -218,7 +221,7 @@ Four templates mirror the core loop: `deepthonk/generate`, `deepthonk/compare`,
|
|
|
218
221
|
|
|
219
222
|
### Limits
|
|
220
223
|
|
|
221
|
-
`deepthonk.resume` reports trace state by default. With `continue: true`, it validates
|
|
224
|
+
`deepthonk.resume` reports trace state by default. With `continue: true`, it validates phase order, artifacts, run/provider/model identity, scores, usage, and deterministic pair schedules before replaying a complete phase boundary. MCP Sampling model hints are preferences, token usage may be unavailable, and stdio Sampling concurrency is capped at 4. Streamable HTTP in v0.1 supports direct providers only.
|
|
222
225
|
|
|
223
226
|
## Customization
|
|
224
227
|
|
|
@@ -294,8 +297,8 @@ Release publishing is tag-triggered through npm Trusted Publishing. See [docs/re
|
|
|
294
297
|
|
|
295
298
|
Known limits for this release:
|
|
296
299
|
|
|
297
|
-
- Conservative resume
|
|
298
|
-
- MCP Sampling is
|
|
300
|
+
- Conservative v1 resume replays an interrupted phase wholesale, preserves its usage accounting, and only reuses validated completed phase boundaries.
|
|
301
|
+
- MCP Sampling is stdio-host-only in v0.1. Standalone CLI and Streamable HTTP runs need a direct provider.
|
|
299
302
|
- `maxUsd` requires known model pricing; add explicit prices in YAML for custom providers and model IDs. Optional fields `longContextThresholdTokens`, `inputUsdPerMillionLong`, and `outputUsdPerMillionLong` enable tiered pricing for models with a long-context surcharge (e.g., Gemini at 200K input tokens). Cache hit/miss rates remain flat.
|
|
300
303
|
|
|
301
304
|
## Acknowledgments
|
package/dist/defaults.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface ProviderModelOverrides {
|
|
|
9
9
|
}
|
|
10
10
|
export interface ProviderConfigOptions {
|
|
11
11
|
provider: string;
|
|
12
|
+
routeFingerprint?: string;
|
|
12
13
|
baseUrl?: string;
|
|
13
14
|
apiKeyEnv?: string;
|
|
14
15
|
apiKey?: string;
|
|
@@ -16,6 +17,14 @@ export interface ProviderConfigOptions {
|
|
|
16
17
|
retry?: ProviderConfig["retry"];
|
|
17
18
|
supportsJsonMode?: boolean;
|
|
18
19
|
samplingTransport?: SamplingTransport;
|
|
20
|
+
modelHints?: string[];
|
|
21
|
+
costPriority?: number;
|
|
22
|
+
speedPriority?: number;
|
|
23
|
+
intelligencePriority?: number;
|
|
24
|
+
includeRawOutputs?: boolean;
|
|
25
|
+
requestTimeoutMs?: number;
|
|
26
|
+
/** Disable implicit endpoint and credential defaults for an explicitly replaced route. */
|
|
27
|
+
inheritProviderDefaults?: boolean;
|
|
19
28
|
roleProviders?: Partial<Record<ProviderRole, Partial<Omit<RoleProviderConfig, "model">> & {
|
|
20
29
|
model?: string;
|
|
21
30
|
}>>;
|
package/dist/defaults.js
CHANGED
|
@@ -8,15 +8,23 @@ export function resolveProviderModels(provider, overrides = {}) {
|
|
|
8
8
|
}
|
|
9
9
|
export function resolveProviderConfig(options) {
|
|
10
10
|
const models = resolveProviderModels(options.provider, options.models);
|
|
11
|
+
const inheritProviderDefaults = options.inheritProviderDefaults ?? true;
|
|
11
12
|
return {
|
|
12
13
|
provider: options.provider,
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
routeFingerprint: options.routeFingerprint,
|
|
15
|
+
baseUrl: options.baseUrl ?? (inheritProviderDefaults ? defaultBaseUrl(options.provider) : undefined),
|
|
16
|
+
apiKeyEnv: options.apiKeyEnv ?? (inheritProviderDefaults ? defaultApiKeyEnv(options.provider) : undefined),
|
|
15
17
|
apiKey: options.apiKey,
|
|
16
18
|
models,
|
|
17
19
|
retry: options.retry,
|
|
18
20
|
supportsJsonMode: options.supportsJsonMode,
|
|
19
21
|
samplingTransport: options.samplingTransport,
|
|
22
|
+
modelHints: options.modelHints,
|
|
23
|
+
costPriority: options.costPriority,
|
|
24
|
+
speedPriority: options.speedPriority,
|
|
25
|
+
intelligencePriority: options.intelligencePriority,
|
|
26
|
+
includeRawOutputs: options.includeRawOutputs,
|
|
27
|
+
requestTimeoutMs: options.requestTimeoutMs,
|
|
20
28
|
roleProviders: resolveRoleProviders(options.provider, models, options.roleProviders, options.retry, options.supportsJsonMode)
|
|
21
29
|
};
|
|
22
30
|
}
|
|
@@ -58,15 +66,16 @@ function resolveRoleProviders(baseProvider, models, roleProviders, baseRetry, ba
|
|
|
58
66
|
if (!input)
|
|
59
67
|
continue;
|
|
60
68
|
const provider = input.provider ?? baseProvider;
|
|
61
|
-
const
|
|
69
|
+
const isolatedRoute = input.baseUrl !== undefined || (input.provider !== undefined && input.provider !== baseProvider);
|
|
70
|
+
const model = input.model ?? (isolatedRoute ? defaultModel(provider, role) : models[role]) ?? defaultModel(provider, role);
|
|
62
71
|
resolved[role] = {
|
|
63
72
|
provider,
|
|
64
73
|
baseUrl: input.baseUrl ?? defaultBaseUrl(provider),
|
|
65
|
-
apiKeyEnv: input.apiKeyEnv ?? defaultApiKeyEnv(provider),
|
|
74
|
+
apiKeyEnv: input.apiKeyEnv ?? (input.baseUrl === undefined ? defaultApiKeyEnv(provider) : undefined),
|
|
66
75
|
apiKey: input.apiKey,
|
|
67
76
|
model,
|
|
68
77
|
retry: input.retry ?? baseRetry,
|
|
69
|
-
supportsJsonMode: input.supportsJsonMode ?? baseSupportsJsonMode
|
|
78
|
+
supportsJsonMode: input.supportsJsonMode ?? (isolatedRoute ? undefined : baseSupportsJsonMode)
|
|
70
79
|
};
|
|
71
80
|
}
|
|
72
81
|
return Object.keys(resolved).length ? resolved : undefined;
|
package/dist/defaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type BuiltInProfileName, type RunConfig } from "@deepthonk/core";
|
|
2
|
+
import type { ProviderRole } from "./types.js";
|
|
3
|
+
export interface ExternalConfigFile {
|
|
4
|
+
runId?: string;
|
|
5
|
+
profile?: BuiltInProfileName;
|
|
6
|
+
provider?: string;
|
|
7
|
+
base_url?: string;
|
|
8
|
+
api_key_env?: string;
|
|
9
|
+
supports_json_mode?: boolean;
|
|
10
|
+
models?: {
|
|
11
|
+
generator?: string;
|
|
12
|
+
mutator?: string;
|
|
13
|
+
judge?: string;
|
|
14
|
+
finalizer?: string;
|
|
15
|
+
};
|
|
16
|
+
providers?: Partial<Record<ProviderRole, ExternalRoleProviderConfig>>;
|
|
17
|
+
concurrency?: Partial<RunConfig["concurrency"]>;
|
|
18
|
+
retry?: Partial<RunConfig["retry"]>;
|
|
19
|
+
budget?: RunConfig["budget"];
|
|
20
|
+
output?: Partial<RunConfig["output"]>;
|
|
21
|
+
prompt_style?: RunConfig["promptStyle"];
|
|
22
|
+
algorithm?: ExternalAlgorithmOverrides;
|
|
23
|
+
prompts?: ExternalPromptOverrides;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface ExternalAlgorithmOverrides {
|
|
27
|
+
n?: number;
|
|
28
|
+
k?: number;
|
|
29
|
+
t?: number;
|
|
30
|
+
m?: number;
|
|
31
|
+
lambda?: number;
|
|
32
|
+
sample_temperature?: number;
|
|
33
|
+
mutate_temperature?: number;
|
|
34
|
+
judge_temperature?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface ExternalPromptOverrides {
|
|
37
|
+
generate?: {
|
|
38
|
+
system?: string;
|
|
39
|
+
user?: string;
|
|
40
|
+
};
|
|
41
|
+
compare?: {
|
|
42
|
+
system?: string;
|
|
43
|
+
user?: string;
|
|
44
|
+
};
|
|
45
|
+
mutate?: {
|
|
46
|
+
system?: string;
|
|
47
|
+
user?: string;
|
|
48
|
+
};
|
|
49
|
+
finalize?: {
|
|
50
|
+
system?: string;
|
|
51
|
+
user?: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
interface ExternalRoleProviderConfig {
|
|
55
|
+
provider?: string;
|
|
56
|
+
base_url?: string;
|
|
57
|
+
api_key_env?: string;
|
|
58
|
+
model?: string;
|
|
59
|
+
supports_json_mode?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** Normalize the public YAML contract to the camelCase core/provider shape. */
|
|
62
|
+
export declare function normalizeExternalConfig(value: unknown, source?: string): ExternalConfigFile;
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { ConfigError } from "@deepthonk/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const nonEmptyString = z.string().trim().min(1);
|
|
4
|
+
const promptBlockSchema = z.object({ system: z.string().optional(), user: z.string().optional() }).strict();
|
|
5
|
+
const priceSchema = z
|
|
6
|
+
.object({
|
|
7
|
+
provider: nonEmptyString,
|
|
8
|
+
model: nonEmptyString,
|
|
9
|
+
inputUsdPerMillion: z.number().min(0).optional(),
|
|
10
|
+
inputCacheHitUsdPerMillion: z.number().min(0).optional(),
|
|
11
|
+
inputCacheMissUsdPerMillion: z.number().min(0).optional(),
|
|
12
|
+
outputUsdPerMillion: z.number().min(0).optional(),
|
|
13
|
+
longContextThresholdTokens: z.number().int().min(1).optional(),
|
|
14
|
+
inputUsdPerMillionLong: z.number().min(0).optional(),
|
|
15
|
+
outputUsdPerMillionLong: z.number().min(0).optional()
|
|
16
|
+
})
|
|
17
|
+
.strict()
|
|
18
|
+
.superRefine((price, context) => {
|
|
19
|
+
const longFields = [price.longContextThresholdTokens, price.inputUsdPerMillionLong, price.outputUsdPerMillionLong];
|
|
20
|
+
if (longFields.every((entry) => entry === undefined))
|
|
21
|
+
return;
|
|
22
|
+
if (price.longContextThresholdTokens === undefined ||
|
|
23
|
+
price.inputUsdPerMillion === undefined ||
|
|
24
|
+
price.outputUsdPerMillion === undefined ||
|
|
25
|
+
price.inputUsdPerMillionLong === undefined ||
|
|
26
|
+
price.outputUsdPerMillionLong === undefined) {
|
|
27
|
+
context.addIssue({
|
|
28
|
+
code: z.ZodIssueCode.custom,
|
|
29
|
+
message: "Long-context pricing requires threshold and complete flat/long input/output rates."
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
const externalConfigSchema = z
|
|
34
|
+
.object({
|
|
35
|
+
runId: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/).optional(),
|
|
36
|
+
profile: z.enum(["quick", "balanced", "paper"]).optional(),
|
|
37
|
+
provider: nonEmptyString.optional(),
|
|
38
|
+
base_url: z.string().url().optional(),
|
|
39
|
+
api_key_env: z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).optional(),
|
|
40
|
+
supports_json_mode: z.boolean().optional(),
|
|
41
|
+
models: z.object({ generator: nonEmptyString.optional(), mutator: nonEmptyString.optional(), judge: nonEmptyString.optional(), finalizer: nonEmptyString.optional() }).strict().optional(),
|
|
42
|
+
providers: z.record(z.enum(["generator", "mutator", "judge", "finalizer"]), z.object({
|
|
43
|
+
provider: nonEmptyString.optional(),
|
|
44
|
+
base_url: z.string().url().optional(),
|
|
45
|
+
api_key_env: z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).optional(),
|
|
46
|
+
model: nonEmptyString.optional(),
|
|
47
|
+
supports_json_mode: z.boolean().optional()
|
|
48
|
+
}).strict()).optional(),
|
|
49
|
+
concurrency: z.object({ generate: z.number().int().min(1).optional(), judge: z.number().int().min(1).optional(), mutate: z.number().int().min(1).optional() }).strict().optional(),
|
|
50
|
+
retry: z.object({ httpRetries: z.number().int().min(0).optional(), invalidJsonRetries: z.number().int().min(0).optional(), requestTimeoutMs: z.number().int().min(1).optional() }).strict().optional(),
|
|
51
|
+
budget: z.object({
|
|
52
|
+
maxCalls: z.number().int().min(1).optional(),
|
|
53
|
+
maxInputTokens: z.number().int().min(1).optional(),
|
|
54
|
+
maxOutputTokens: z.number().int().min(1).optional(),
|
|
55
|
+
maxUsd: z.number().min(0).optional(),
|
|
56
|
+
prices: z.array(priceSchema).optional()
|
|
57
|
+
}).strict().optional(),
|
|
58
|
+
output: z.object({ includeRawModelOutputs: z.boolean().optional(), includePrompts: z.boolean().optional() }).strict().optional(),
|
|
59
|
+
prompt_style: z.enum(["general", "paper-programming"]).optional(),
|
|
60
|
+
algorithm: z.object({
|
|
61
|
+
n: z.number().int().min(2).optional(),
|
|
62
|
+
k: z.number().int().min(1).optional(),
|
|
63
|
+
t: z.number().int().min(0).optional(),
|
|
64
|
+
m: z.number().int().min(1).optional(),
|
|
65
|
+
lambda: z.number().min(0).optional(),
|
|
66
|
+
sample_temperature: z.number().min(0).optional(),
|
|
67
|
+
mutate_temperature: z.number().min(0).optional(),
|
|
68
|
+
judge_temperature: z.number().min(0).optional()
|
|
69
|
+
}).strict().optional(),
|
|
70
|
+
prompts: z.object({ generate: promptBlockSchema.optional(), compare: promptBlockSchema.optional(), mutate: promptBlockSchema.optional(), finalize: promptBlockSchema.optional() }).strict().optional(),
|
|
71
|
+
metadata: z.record(z.unknown()).optional()
|
|
72
|
+
})
|
|
73
|
+
.strict();
|
|
74
|
+
/** Normalize the public YAML contract to the camelCase core/provider shape. */
|
|
75
|
+
export function normalizeExternalConfig(value, source = "config") {
|
|
76
|
+
const root = configRecord(value, source);
|
|
77
|
+
assertKnownKeys(root, [
|
|
78
|
+
"profile", "run_id", "runId", "provider", "base_url", "baseUrl", "api_key_env", "apiKeyEnv",
|
|
79
|
+
"supports_json_mode", "supportsJsonMode", "models", "providers", "concurrency", "retry", "budget",
|
|
80
|
+
"output", "prompt_style", "promptStyle", "algorithm", "prompts", "metadata"
|
|
81
|
+
], source);
|
|
82
|
+
const normalized = {
|
|
83
|
+
runId: aliased(root, "run_id", "runId", source),
|
|
84
|
+
profile: root.profile,
|
|
85
|
+
provider: root.provider,
|
|
86
|
+
base_url: aliased(root, "base_url", "baseUrl", source),
|
|
87
|
+
api_key_env: aliased(root, "api_key_env", "apiKeyEnv", source),
|
|
88
|
+
supports_json_mode: aliased(root, "supports_json_mode", "supportsJsonMode", source),
|
|
89
|
+
models: normalizeModels(root.models, `${source}.models`),
|
|
90
|
+
providers: normalizeProviders(root.providers, `${source}.providers`),
|
|
91
|
+
concurrency: normalizeConcurrency(root.concurrency, `${source}.concurrency`),
|
|
92
|
+
retry: normalizeRetry(root.retry, `${source}.retry`),
|
|
93
|
+
budget: normalizeBudget(root.budget, `${source}.budget`),
|
|
94
|
+
output: normalizeOutput(root.output, `${source}.output`),
|
|
95
|
+
prompt_style: aliased(root, "prompt_style", "promptStyle", source),
|
|
96
|
+
algorithm: normalizeAlgorithm(root.algorithm, `${source}.algorithm`),
|
|
97
|
+
prompts: normalizePrompts(root.prompts, `${source}.prompts`),
|
|
98
|
+
metadata: root.metadata === undefined ? undefined : configRecord(root.metadata, `${source}.metadata`)
|
|
99
|
+
};
|
|
100
|
+
const compact = compactConfig(normalized);
|
|
101
|
+
const parsed = externalConfigSchema.safeParse(compact);
|
|
102
|
+
if (!parsed.success) {
|
|
103
|
+
throw new ConfigError(`Invalid config value at ${source}: ${parsed.error.issues.map((issue) => `${issue.path.join(".") || "root"}: ${issue.message}`).join("; ")}.`, {
|
|
104
|
+
code: "config.invalid_value",
|
|
105
|
+
retryable: false,
|
|
106
|
+
fix: "Use the documented strings, booleans, enums, and numeric ranges. YAML numeric values must not be quoted."
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return parsed.data;
|
|
110
|
+
}
|
|
111
|
+
function normalizeModels(value, path) {
|
|
112
|
+
if (value === undefined)
|
|
113
|
+
return undefined;
|
|
114
|
+
const record = configRecord(value, path);
|
|
115
|
+
assertKnownKeys(record, ["generator", "mutator", "judge", "finalizer"], path);
|
|
116
|
+
return compactConfig({ generator: record.generator, mutator: record.mutator, judge: record.judge, finalizer: record.finalizer });
|
|
117
|
+
}
|
|
118
|
+
function normalizeProviders(value, path) {
|
|
119
|
+
if (value === undefined)
|
|
120
|
+
return undefined;
|
|
121
|
+
const record = configRecord(value, path);
|
|
122
|
+
assertKnownKeys(record, ["generator", "mutator", "judge", "finalizer"], path);
|
|
123
|
+
const providers = {};
|
|
124
|
+
for (const role of ["generator", "mutator", "judge", "finalizer"]) {
|
|
125
|
+
if (record[role] === undefined)
|
|
126
|
+
continue;
|
|
127
|
+
const rolePath = `${path}.${role}`;
|
|
128
|
+
const input = configRecord(record[role], rolePath);
|
|
129
|
+
assertKnownKeys(input, ["provider", "base_url", "baseUrl", "api_key_env", "apiKeyEnv", "model", "supports_json_mode", "supportsJsonMode"], rolePath);
|
|
130
|
+
providers[role] = compactConfig({
|
|
131
|
+
provider: input.provider,
|
|
132
|
+
base_url: aliased(input, "base_url", "baseUrl", rolePath),
|
|
133
|
+
api_key_env: aliased(input, "api_key_env", "apiKeyEnv", rolePath),
|
|
134
|
+
model: input.model,
|
|
135
|
+
supports_json_mode: aliased(input, "supports_json_mode", "supportsJsonMode", rolePath)
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return providers;
|
|
139
|
+
}
|
|
140
|
+
function normalizeConcurrency(value, path) {
|
|
141
|
+
if (value === undefined)
|
|
142
|
+
return undefined;
|
|
143
|
+
const record = configRecord(value, path);
|
|
144
|
+
assertKnownKeys(record, ["generate", "judge", "mutate"], path);
|
|
145
|
+
return compactConfig({ generate: record.generate, judge: record.judge, mutate: record.mutate });
|
|
146
|
+
}
|
|
147
|
+
function normalizeRetry(value, path) {
|
|
148
|
+
if (value === undefined)
|
|
149
|
+
return undefined;
|
|
150
|
+
const record = configRecord(value, path);
|
|
151
|
+
assertKnownKeys(record, ["http_retries", "httpRetries", "invalid_json_retries", "invalidJsonRetries", "request_timeout_ms", "requestTimeoutMs"], path);
|
|
152
|
+
return compactConfig({
|
|
153
|
+
httpRetries: aliased(record, "http_retries", "httpRetries", path),
|
|
154
|
+
invalidJsonRetries: aliased(record, "invalid_json_retries", "invalidJsonRetries", path),
|
|
155
|
+
requestTimeoutMs: aliased(record, "request_timeout_ms", "requestTimeoutMs", path)
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function normalizeBudget(value, path) {
|
|
159
|
+
if (value === undefined)
|
|
160
|
+
return undefined;
|
|
161
|
+
const record = configRecord(value, path);
|
|
162
|
+
assertKnownKeys(record, ["max_calls", "maxCalls", "max_input_tokens", "maxInputTokens", "max_output_tokens", "maxOutputTokens", "max_usd", "maxUsd", "prices"], path);
|
|
163
|
+
return compactConfig({
|
|
164
|
+
maxCalls: aliased(record, "max_calls", "maxCalls", path),
|
|
165
|
+
maxInputTokens: aliased(record, "max_input_tokens", "maxInputTokens", path),
|
|
166
|
+
maxOutputTokens: aliased(record, "max_output_tokens", "maxOutputTokens", path),
|
|
167
|
+
maxUsd: aliased(record, "max_usd", "maxUsd", path),
|
|
168
|
+
prices: record.prices === undefined ? undefined : normalizePrices(record.prices, `${path}.prices`)
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function normalizePrices(value, path) {
|
|
172
|
+
if (!Array.isArray(value))
|
|
173
|
+
throw invalidConfigShape(path, "an array");
|
|
174
|
+
return value.map((entry, index) => {
|
|
175
|
+
const entryPath = `${path}[${index}]`;
|
|
176
|
+
const record = configRecord(entry, entryPath);
|
|
177
|
+
const aliases = [
|
|
178
|
+
["input_usd_per_million", "inputUsdPerMillion"], ["input_cache_hit_usd_per_million", "inputCacheHitUsdPerMillion"],
|
|
179
|
+
["input_cache_miss_usd_per_million", "inputCacheMissUsdPerMillion"], ["output_usd_per_million", "outputUsdPerMillion"],
|
|
180
|
+
["long_context_threshold_tokens", "longContextThresholdTokens"], ["input_usd_per_million_long", "inputUsdPerMillionLong"],
|
|
181
|
+
["output_usd_per_million_long", "outputUsdPerMillionLong"]
|
|
182
|
+
];
|
|
183
|
+
assertKnownKeys(record, ["provider", "model", ...aliases.flat()], entryPath);
|
|
184
|
+
return compactConfig({
|
|
185
|
+
provider: record.provider, model: record.model,
|
|
186
|
+
inputUsdPerMillion: aliased(record, ...aliases[0], entryPath),
|
|
187
|
+
inputCacheHitUsdPerMillion: aliased(record, ...aliases[1], entryPath),
|
|
188
|
+
inputCacheMissUsdPerMillion: aliased(record, ...aliases[2], entryPath),
|
|
189
|
+
outputUsdPerMillion: aliased(record, ...aliases[3], entryPath),
|
|
190
|
+
longContextThresholdTokens: aliased(record, ...aliases[4], entryPath),
|
|
191
|
+
inputUsdPerMillionLong: aliased(record, ...aliases[5], entryPath),
|
|
192
|
+
outputUsdPerMillionLong: aliased(record, ...aliases[6], entryPath)
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
function normalizeOutput(value, path) {
|
|
197
|
+
if (value === undefined)
|
|
198
|
+
return undefined;
|
|
199
|
+
const record = configRecord(value, path);
|
|
200
|
+
assertKnownKeys(record, ["include_raw_model_outputs", "includeRawModelOutputs", "include_prompts", "includePrompts"], path);
|
|
201
|
+
return compactConfig({
|
|
202
|
+
includeRawModelOutputs: aliased(record, "include_raw_model_outputs", "includeRawModelOutputs", path),
|
|
203
|
+
includePrompts: aliased(record, "include_prompts", "includePrompts", path)
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
function normalizeAlgorithm(value, path) {
|
|
207
|
+
if (value === undefined)
|
|
208
|
+
return undefined;
|
|
209
|
+
const record = configRecord(value, path);
|
|
210
|
+
assertKnownKeys(record, ["n", "k", "t", "m", "lambda", "sample_temperature", "sampleTemperature", "mutate_temperature", "mutateTemperature", "judge_temperature", "judgeTemperature"], path);
|
|
211
|
+
return compactConfig({
|
|
212
|
+
n: record.n, k: record.k, t: record.t, m: record.m, lambda: record.lambda,
|
|
213
|
+
sample_temperature: aliased(record, "sample_temperature", "sampleTemperature", path),
|
|
214
|
+
mutate_temperature: aliased(record, "mutate_temperature", "mutateTemperature", path),
|
|
215
|
+
judge_temperature: aliased(record, "judge_temperature", "judgeTemperature", path)
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function normalizePrompts(value, path) {
|
|
219
|
+
if (value === undefined)
|
|
220
|
+
return undefined;
|
|
221
|
+
const record = configRecord(value, path);
|
|
222
|
+
assertKnownKeys(record, ["generate", "compare", "mutate", "finalize"], path);
|
|
223
|
+
const prompts = {};
|
|
224
|
+
for (const phase of ["generate", "compare", "mutate", "finalize"]) {
|
|
225
|
+
if (record[phase] === undefined)
|
|
226
|
+
continue;
|
|
227
|
+
const phasePath = `${path}.${phase}`;
|
|
228
|
+
const prompt = configRecord(record[phase], phasePath);
|
|
229
|
+
assertKnownKeys(prompt, ["system", "user"], phasePath);
|
|
230
|
+
prompts[phase] = compactConfig({ system: prompt.system, user: prompt.user });
|
|
231
|
+
}
|
|
232
|
+
return prompts;
|
|
233
|
+
}
|
|
234
|
+
function configRecord(value, path) {
|
|
235
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
236
|
+
throw invalidConfigShape(path, "a mapping");
|
|
237
|
+
return value;
|
|
238
|
+
}
|
|
239
|
+
function assertKnownKeys(record, allowed, path) {
|
|
240
|
+
const allowedSet = new Set(allowed);
|
|
241
|
+
const unknown = Object.keys(record).filter((key) => !allowedSet.has(key));
|
|
242
|
+
if (!unknown.length)
|
|
243
|
+
return;
|
|
244
|
+
throw new ConfigError(`Unknown config key${unknown.length === 1 ? "" : "s"} at ${path}: ${unknown.join(", ")}.`, {
|
|
245
|
+
code: "config.unknown_key", retryable: false,
|
|
246
|
+
fix: "Remove misspelled or unsupported operational keys. Arbitrary application data is allowed only below metadata."
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
function aliased(record, canonical, camel, path) {
|
|
250
|
+
const hasCanonical = Object.prototype.hasOwnProperty.call(record, canonical);
|
|
251
|
+
const hasCamel = Object.prototype.hasOwnProperty.call(record, camel);
|
|
252
|
+
if (hasCanonical && hasCamel && JSON.stringify(record[canonical]) !== JSON.stringify(record[camel])) {
|
|
253
|
+
throw new ConfigError(`Conflicting config aliases at ${path}: '${canonical}' and '${camel}' have different values.`, {
|
|
254
|
+
code: "config.alias_conflict", retryable: false,
|
|
255
|
+
fix: `Keep the canonical snake_case '${canonical}' key, or make both aliases identical during migration.`
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
return hasCanonical ? record[canonical] : record[camel];
|
|
259
|
+
}
|
|
260
|
+
function compactConfig(value) {
|
|
261
|
+
return Object.fromEntries(Object.entries(value).filter(([, entryValue]) => entryValue !== undefined));
|
|
262
|
+
}
|
|
263
|
+
function invalidConfigShape(path, expected) {
|
|
264
|
+
return new ConfigError(`${path} must be ${expected}.`, { code: "config.invalid_shape", retryable: false, fix: "Use the documented YAML mapping and array structure." });
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=externalConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalConfig.js","sourceRoot":"","sources":["../src/externalConfig.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export * from "./fake.js";
|
|
2
2
|
export * from "./defaults.js";
|
|
3
3
|
export * from "./env.js";
|
|
4
|
+
export * from "./externalConfig.js";
|
|
4
5
|
export * from "./jsonExtract.js";
|
|
5
6
|
export * from "./profileRegistry.js";
|
|
6
7
|
export * from "./openaiCompatible.js";
|
|
7
8
|
export * from "./pricing.js";
|
|
9
|
+
export * from "./providerReplay.js";
|
|
8
10
|
export * from "./registry.js";
|
|
9
11
|
export * from "./sampling.js";
|
|
10
12
|
export * from "./types.js";
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export * from "./fake.js";
|
|
2
2
|
export * from "./defaults.js";
|
|
3
3
|
export * from "./env.js";
|
|
4
|
+
export * from "./externalConfig.js";
|
|
4
5
|
export * from "./jsonExtract.js";
|
|
5
6
|
export * from "./profileRegistry.js";
|
|
6
7
|
export * from "./openaiCompatible.js";
|
|
7
8
|
export * from "./pricing.js";
|
|
9
|
+
export * from "./providerReplay.js";
|
|
8
10
|
export * from "./registry.js";
|
|
9
11
|
export * from "./sampling.js";
|
|
10
12
|
export * from "./types.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
@@ -7,8 +7,11 @@ export declare class OpenAiCompatibleDriver implements ModelDriver {
|
|
|
7
7
|
readonly apiKey?: string;
|
|
8
8
|
readonly httpRetries: number;
|
|
9
9
|
readonly requestTimeoutMs?: number;
|
|
10
|
+
readonly responseBodyLimitBytes: number;
|
|
11
|
+
readonly maxRetryDelayMs: number;
|
|
10
12
|
readonly supportsJsonMode: boolean;
|
|
11
|
-
private
|
|
13
|
+
private jsonModeState;
|
|
14
|
+
private jsonModeProbe?;
|
|
12
15
|
constructor(config: ProviderConfig);
|
|
13
16
|
generate(input: GenerateInput): Promise<ModelTextResult>;
|
|
14
17
|
compare(input: CompareInput): Promise<ModelTextResult>;
|