@broberg/ai-sdk 0.27.0 → 0.29.0
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/dist/{chunk-IT7HNKLY.js → chunk-V2PD522L.js} +53 -13
- package/dist/chunk-V2PD522L.js.map +1 -0
- package/dist/index.d.ts +124 -29
- package/dist/index.js +163 -27
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +13 -0
- package/dist/registry.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-IT7HNKLY.js.map +0 -1
|
@@ -1,21 +1,56 @@
|
|
|
1
|
+
// src/routing/tier-map.ts
|
|
2
|
+
var DEFAULT_TIER_MAP = {
|
|
3
|
+
fast: { provider: "mistral", model: "mistral-small-latest", transport: "http" },
|
|
4
|
+
smart: { provider: "mistral", model: "mistral-large-latest", transport: "http" },
|
|
5
|
+
powerful: { provider: "mistral", model: "mistral-large-latest", transport: "http" },
|
|
6
|
+
cheap: { provider: "mistral", model: "mistral-small-latest", transport: "http" },
|
|
7
|
+
// Vision: small-latest (vision-capable, cheap EU) is the default; override to
|
|
8
|
+
// mistral-large-latest for demanding image/spatial/composition work.
|
|
9
|
+
vision: { provider: "mistral", model: "mistral-small-latest", transport: "http" },
|
|
10
|
+
// Native video understanding — Gemini leads; flash-lite is the cheap default (F019).
|
|
11
|
+
// NOT Anthropic → out of the F030 phase-out (its own EU epic if/when needed).
|
|
12
|
+
video: { provider: "gemini", model: "gemini-2.5-flash-lite", transport: "http" },
|
|
13
|
+
// NOT Anthropic → out of F030 (EU-embedding migration is its own future epic).
|
|
14
|
+
embedding: { provider: "openai", model: "text-embedding-3-small", transport: "http" }
|
|
15
|
+
};
|
|
16
|
+
function resolveTier(tier, override, configMap) {
|
|
17
|
+
const base = configMap?.[tier] ?? DEFAULT_TIER_MAP[tier];
|
|
18
|
+
return { ...base, ...override };
|
|
19
|
+
}
|
|
20
|
+
|
|
1
21
|
// src/availability/registry.ts
|
|
2
22
|
var SUSPENDED_FABLE_MYTHOS = "suspended \u2014 US export-control directive (2026-06-12)";
|
|
3
23
|
var DEFAULTS = [
|
|
4
24
|
// ── Anthropic ────────────────────────────────────────────────────────────
|
|
5
|
-
{ id: "claude-haiku-4-5", aliases: ["haiku"
|
|
6
|
-
{ id: "claude-sonnet-4-6", aliases: ["sonnet"
|
|
7
|
-
{ id: "claude-opus-4-8", aliases: ["opus"
|
|
25
|
+
{ id: "claude-haiku-4-5", aliases: ["haiku"], provider: "anthropic", available: true, status: "available", source: "default" },
|
|
26
|
+
{ id: "claude-sonnet-4-6", aliases: ["sonnet"], provider: "anthropic", available: true, status: "available", source: "default" },
|
|
27
|
+
{ id: "claude-opus-4-8", aliases: ["opus"], provider: "anthropic", available: true, status: "available", source: "default" },
|
|
8
28
|
{ id: "claude-fable-5", aliases: ["fable"], provider: "anthropic", available: true, status: "available", source: "default" },
|
|
9
29
|
{ id: "claude-mythos-5", aliases: ["mythos"], provider: "anthropic", available: false, status: "suspended", note: SUSPENDED_FABLE_MYTHOS, source: "default" },
|
|
10
30
|
// ── Gemini ───────────────────────────────────────────────────────────────
|
|
11
31
|
{ id: "gemini-2.5-flash", aliases: ["gemini-flash"], provider: "gemini", available: true, status: "available", source: "default" },
|
|
12
|
-
{ id: "gemini-2.5-flash-lite", aliases: ["gemini-flash-lite"
|
|
32
|
+
{ id: "gemini-2.5-flash-lite", aliases: ["gemini-flash-lite"], provider: "gemini", available: true, status: "available", source: "default" },
|
|
13
33
|
// ── OpenAI ───────────────────────────────────────────────────────────────
|
|
14
|
-
{ id: "text-embedding-3-small", aliases: [
|
|
34
|
+
{ id: "text-embedding-3-small", aliases: [], provider: "openai", available: true, status: "available", source: "default" },
|
|
15
35
|
// ── Mistral (EU / GDPR) ──────────────────────────────────────────────────
|
|
16
36
|
{ id: "mistral-large-latest", aliases: ["mistral-large"], provider: "mistral", available: true, status: "available", source: "default" },
|
|
17
37
|
{ id: "mistral-small-latest", aliases: ["mistral-small"], provider: "mistral", available: true, status: "available", source: "default" }
|
|
18
38
|
];
|
|
39
|
+
var TIER_ALIAS_CONFLICTS = [];
|
|
40
|
+
function applyTierAliases(entries) {
|
|
41
|
+
for (const [tier, spec] of Object.entries(DEFAULT_TIER_MAP)) {
|
|
42
|
+
const owner = entries.find((e) => e.id === spec.model && e.provider === spec.provider);
|
|
43
|
+
for (const e of entries) {
|
|
44
|
+
if (e !== owner && e.aliases.includes(tier)) {
|
|
45
|
+
TIER_ALIAS_CONFLICTS.push(`${tier} is hand-declared on ${e.id} (${e.provider}) but tier ${tier} calls ${spec.model} (${spec.provider})`);
|
|
46
|
+
e.aliases = e.aliases.filter((a) => a !== tier);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (owner && !owner.aliases.includes(tier)) owner.aliases.push(tier);
|
|
50
|
+
}
|
|
51
|
+
return entries;
|
|
52
|
+
}
|
|
53
|
+
applyTierAliases(DEFAULTS);
|
|
19
54
|
var OVERLAY = /* @__PURE__ */ new Map();
|
|
20
55
|
var ALIAS_INDEX = /* @__PURE__ */ new Map();
|
|
21
56
|
function seed() {
|
|
@@ -83,15 +118,16 @@ var ModelUnavailableError = class extends Error {
|
|
|
83
118
|
function listModels(opts = {}) {
|
|
84
119
|
return allEntries(opts.provider);
|
|
85
120
|
}
|
|
86
|
-
function isAvailable(requested) {
|
|
121
|
+
function isAvailable(requested, requireKnown = false) {
|
|
87
122
|
const e = getEntry(requested);
|
|
88
|
-
|
|
123
|
+
if (!e) return !requireKnown;
|
|
124
|
+
return e.available;
|
|
89
125
|
}
|
|
90
126
|
function resolveModel(requested, opts = {}) {
|
|
91
127
|
const id = canonicalId(requested) ?? requested;
|
|
92
128
|
const entry = getEntry(requested);
|
|
93
129
|
const provider = opts.provider ?? entry?.provider;
|
|
94
|
-
if (isAvailable(requested)) {
|
|
130
|
+
if (isAvailable(requested, opts.requireKnown)) {
|
|
95
131
|
return {
|
|
96
132
|
ok: true,
|
|
97
133
|
model: id,
|
|
@@ -103,7 +139,7 @@ function resolveModel(requested, opts = {}) {
|
|
|
103
139
|
}
|
|
104
140
|
const chain = opts.fallback === void 0 ? [] : Array.isArray(opts.fallback) ? opts.fallback : [opts.fallback];
|
|
105
141
|
for (const fb of chain) {
|
|
106
|
-
if (isAvailable(fb)) {
|
|
142
|
+
if (isAvailable(fb, opts.requireKnown)) {
|
|
107
143
|
const fbId = canonicalId(fb) ?? fb;
|
|
108
144
|
return {
|
|
109
145
|
ok: false,
|
|
@@ -116,8 +152,10 @@ function resolveModel(requested, opts = {}) {
|
|
|
116
152
|
};
|
|
117
153
|
}
|
|
118
154
|
}
|
|
155
|
+
const unknownAndGating = !entry && opts.requireKnown;
|
|
156
|
+
const reason = unknownAndGating ? `${id} is not a model this registry knows \u2014 requireKnown was set, so it is not assumed usable` : entry?.note ?? `${id} is unavailable`;
|
|
119
157
|
if (opts.throwIfUnavailable) {
|
|
120
|
-
throw new ModelUnavailableError(id,
|
|
158
|
+
throw new ModelUnavailableError(id, reason, provider);
|
|
121
159
|
}
|
|
122
160
|
return {
|
|
123
161
|
ok: false,
|
|
@@ -125,12 +163,14 @@ function resolveModel(requested, opts = {}) {
|
|
|
125
163
|
requested: id,
|
|
126
164
|
provider,
|
|
127
165
|
fellBack: false,
|
|
128
|
-
status: entry?.status ?? "
|
|
129
|
-
reason
|
|
166
|
+
status: entry?.status ?? "unknown",
|
|
167
|
+
reason
|
|
130
168
|
};
|
|
131
169
|
}
|
|
132
170
|
|
|
133
171
|
export {
|
|
172
|
+
DEFAULT_TIER_MAP,
|
|
173
|
+
resolveTier,
|
|
134
174
|
resetRegistry,
|
|
135
175
|
providerIds,
|
|
136
176
|
setAvailability,
|
|
@@ -138,4 +178,4 @@ export {
|
|
|
138
178
|
listModels,
|
|
139
179
|
resolveModel
|
|
140
180
|
};
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-V2PD522L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/routing/tier-map.ts","../src/availability/registry.ts","../src/availability/types.ts","../src/availability/resolve.ts"],"sourcesContent":["// Tier routing: a named Tier resolves to a concrete (provider, model, transport).\n// Precedence is per-call override > client config map > built-in defaults.\nimport type { Tier, TierSpec } from \"../types.js\";\n\n/** Built-in defaults. Every entry is overridable via AiConfig.defaults or a\n * per-call override.\n *\n * F030 — Anthropic API phase-out: `ANTHROPIC_API_KEY` was globally removed, so the\n * default cloud route may NOT hit Anthropic Console. `fast`/`smart`/`powerful`/\n * `vision` now default to **Mistral EU** (Paris-hosted, Schrems II-safe — so every\n * default text/vision call is GDPR-safe by default). Claude stays reachable as a\n * NON-default quality fallback for non-PII via `override:{provider:\"openrouter\",\n * model:\"anthropic/claude-…\"}`. DeepSeek (CN) is the opt-in non-PII secondary\n * (`provider:\"deepseek\"`), never a default. Magistral (reasoning) / mistral-large\n * for vision are per-call overrides, not defaults (don't pay the premium on all). */\nexport const DEFAULT_TIER_MAP: Record<Tier, TierSpec> = {\n fast: { provider: \"mistral\", model: \"mistral-small-latest\", transport: \"http\" },\n smart: { provider: \"mistral\", model: \"mistral-large-latest\", transport: \"http\" },\n powerful: { provider: \"mistral\", model: \"mistral-large-latest\", transport: \"http\" },\n cheap: { provider: \"mistral\", model: \"mistral-small-latest\", transport: \"http\" },\n // Vision: small-latest (vision-capable, cheap EU) is the default; override to\n // mistral-large-latest for demanding image/spatial/composition work.\n vision: { provider: \"mistral\", model: \"mistral-small-latest\", transport: \"http\" },\n // Native video understanding — Gemini leads; flash-lite is the cheap default (F019).\n // NOT Anthropic → out of the F030 phase-out (its own EU epic if/when needed).\n video: { provider: \"gemini\", model: \"gemini-2.5-flash-lite\", transport: \"http\" },\n // NOT Anthropic → out of F030 (EU-embedding migration is its own future epic).\n embedding: { provider: \"openai\", model: \"text-embedding-3-small\", transport: \"http\" },\n};\n\n/**\n * Resolve a Tier to a concrete TierSpec.\n *\n * Merge order (later wins): DEFAULT_TIER_MAP < configMap < override.\n * - `configMap` is the client-level AiConfig.defaults (per-tier full specs).\n * - `override` is a per-call Partial<TierSpec> — only the fields it sets win.\n */\nexport function resolveTier(\n tier: Tier,\n override?: Partial<TierSpec>,\n configMap?: Partial<Record<Tier, TierSpec>>,\n): TierSpec {\n const base = configMap?.[tier] ?? DEFAULT_TIER_MAP[tier];\n return { ...base, ...override };\n}\n","// F022 — the model-availability registry: the ONE source both resolveModel()\n// (spawn / call path) and listModels() (UI picker) read. A curated default seed\n// (works offline — the durable floor) plus a mutable overlay that\n// refreshAvailability() updates from the live provider list.\n//\n// Scope note: this is a LIVENESS view (is this id alive right now?), not the\n// rich capability/price inventory (that is F017 src/catalogue). We only track\n// ids we want to assert status on; anything not here is fail-open (treated\n// available) so we never block a model we simply do not track.\nimport { DEFAULT_TIER_MAP } from \"../routing/tier-map.js\";\nimport type { AvailabilityStatus, AvailabilitySource, ModelStatus } from \"./types.js\";\n\n/** Internal registry row. `aliases[0]` surfaces as ModelStatus.alias. */\nexport interface RegistryEntry {\n id: string;\n aliases: string[];\n provider: string;\n available: boolean;\n status: AvailabilityStatus;\n note?: string;\n source: AvailabilitySource;\n}\n\nconst SUSPENDED_FABLE_MYTHOS = \"suspended — US export-control directive (2026-06-12)\";\n\n/** Curated defaults. Aliases here are MODEL-IDENTITY names only (short names for\n * the model itself). TIER aliases — fast/smart/powerful/cheap/vision/video/\n * embedding — are NOT written here: they are derived from DEFAULT_TIER_MAP below,\n * because hand-maintaining them in two places is exactly how they drifted.\n *\n * They HAD drifted, and it crossed the EU border: this list said `smart` was\n * claude-sonnet-4-6 (Anthropic, US) for the ~3 months after F030 pointed the\n * default tiers at Mistral EU, so resolveModel('smart') named a US model while\n * ai.chat({tier:'smart'}) called an EU one. Anyone using resolveModel to SHOW or\n * DECIDE where data goes — the obvious use — got the wrong answer. Measured by\n * fd-sundhed in 0.21.1, still true in 0.28.0, fixed here by deleting the second\n * list rather than correcting it. */\nconst DEFAULTS: RegistryEntry[] = [\n // ── Anthropic ────────────────────────────────────────────────────────────\n { id: \"claude-haiku-4-5\", aliases: [\"haiku\"], provider: \"anthropic\", available: true, status: \"available\", source: \"default\" },\n { id: \"claude-sonnet-4-6\", aliases: [\"sonnet\"], provider: \"anthropic\", available: true, status: \"available\", source: \"default\" },\n { id: \"claude-opus-4-8\", aliases: [\"opus\"], provider: \"anthropic\", available: true, status: \"available\", source: \"default\" },\n { id: \"claude-fable-5\", aliases: [\"fable\"], provider: \"anthropic\", available: true, status: \"available\", source: \"default\" },\n { id: \"claude-mythos-5\", aliases: [\"mythos\"], provider: \"anthropic\", available: false, status: \"suspended\", note: SUSPENDED_FABLE_MYTHOS, source: \"default\" },\n // ── Gemini ───────────────────────────────────────────────────────────────\n { id: \"gemini-2.5-flash\", aliases: [\"gemini-flash\"], provider: \"gemini\", available: true, status: \"available\", source: \"default\" },\n { id: \"gemini-2.5-flash-lite\", aliases: [\"gemini-flash-lite\"], provider: \"gemini\", available: true, status: \"available\", source: \"default\" },\n // ── OpenAI ───────────────────────────────────────────────────────────────\n { id: \"text-embedding-3-small\", aliases: [], provider: \"openai\", available: true, status: \"available\", source: \"default\" },\n // ── Mistral (EU / GDPR) ──────────────────────────────────────────────────\n { id: \"mistral-large-latest\", aliases: [\"mistral-large\"], provider: \"mistral\", available: true, status: \"available\", source: \"default\" },\n { id: \"mistral-small-latest\", aliases: [\"mistral-small\"], provider: \"mistral\", available: true, status: \"available\", source: \"default\" },\n];\n\n/** Attach every tier name as an alias of the model that tier ACTUALLY calls.\n * One source: DEFAULT_TIER_MAP decides, the registry follows. A tier whose model\n * is not in the registry is left unaliased on purpose — resolveModel then reports\n * status \"unknown\" (fail-open) instead of inventing a row, and the drift test\n * catches it. */\nexport const TIER_ALIAS_CONFLICTS: string[] = [];\n\nfunction applyTierAliases(entries: RegistryEntry[]): RegistryEntry[] {\n for (const [tier, spec] of Object.entries(DEFAULT_TIER_MAP)) {\n const owner = entries.find((e) => e.id === spec.model && e.provider === spec.provider);\n // A tier name hand-written on any OTHER row is the drift bug returning. It\n // would resolve correctly TODAY only because seed() lets the last write win\n // and the rows happen to be ordered favourably — reorder the array and the\n // tier silently points at the wrong provider again. Record it so a test can\n // fail on it, then strip it so runtime is right regardless.\n for (const e of entries) {\n if (e !== owner && e.aliases.includes(tier)) {\n TIER_ALIAS_CONFLICTS.push(`${tier} is hand-declared on ${e.id} (${e.provider}) but tier ${tier} calls ${spec.model} (${spec.provider})`);\n e.aliases = e.aliases.filter((a) => a !== tier);\n }\n }\n if (owner && !owner.aliases.includes(tier)) owner.aliases.push(tier);\n }\n return entries;\n}\napplyTierAliases(DEFAULTS);\n\n/** The live overlay, keyed by canonical id. Seeded from DEFAULTS (deep-copied so\n * resetting is clean). refreshAvailability() mutates this; resolve/listModels\n * read it synchronously. */\nlet OVERLAY = new Map<string, RegistryEntry>();\n/** alias → canonical id, rebuilt whenever the overlay is seeded. */\nlet ALIAS_INDEX = new Map<string, string>();\n\nfunction seed(): void {\n OVERLAY = new Map(DEFAULTS.map((e) => [e.id, { ...e, aliases: [...e.aliases] }]));\n ALIAS_INDEX = new Map();\n for (const e of DEFAULTS) for (const a of e.aliases) ALIAS_INDEX.set(a, e.id);\n}\nseed();\n\n/** Reset the overlay back to the curated defaults. For tests. */\nexport function resetRegistry(): void {\n seed();\n}\n\n/** Canonical id for a model id OR alias; null when we track neither. */\nexport function canonicalId(requested: string): string | null {\n if (OVERLAY.has(requested)) return requested;\n return ALIAS_INDEX.get(requested) ?? null;\n}\n\n/** The current entry for an id/alias, or undefined when untracked (fail-open). */\nexport function getEntry(requested: string): RegistryEntry | undefined {\n const id = canonicalId(requested);\n return id ? OVERLAY.get(id) : undefined;\n}\n\n/** All tracked entries (optionally provider-scoped), as a public ModelStatus[]. */\nexport function allEntries(provider?: string): ModelStatus[] {\n const rows: ModelStatus[] = [];\n for (const e of OVERLAY.values()) {\n if (provider && e.provider !== provider) continue;\n rows.push({\n id: e.id,\n alias: e.aliases[0],\n provider: e.provider,\n available: e.available,\n status: e.status,\n note: e.note,\n source: e.source,\n });\n }\n return rows;\n}\n\n/** Provider-scoped canonical ids (for refresh reconciliation). */\nexport function providerIds(provider: string): string[] {\n return [...OVERLAY.values()].filter((e) => e.provider === provider).map((e) => e.id);\n}\n\n/** Mark a tracked id available/suspended from a live refresh. No-op if untracked. */\nexport function setAvailability(id: string, available: boolean, note?: string): void {\n const e = OVERLAY.get(id);\n if (!e) return;\n e.available = available;\n e.status = available ? \"available\" : \"suspended\";\n e.source = \"refresh\";\n if (note !== undefined) e.note = note;\n else if (available) e.note = undefined;\n}\n","// F022 — Model Availability Harness. Public types for the availability layer:\n// the shared status read (ModelStatus), the resolve result, and the structured\n// error a caller can flag on. The registry is the one source both the spawn /\n// call path (resolveModel) and UI pickers (listModels) read.\n\nexport type AvailabilityStatus = \"available\" | \"suspended\" | \"unknown\";\n\n/** Where a model's current availability came from: the curated default seed,\n * or a live provider refresh (Anthropic GET /v1/models). */\nexport type AvailabilitySource = \"default\" | \"refresh\";\n\n/** One row of the shared status read — what a UI model-picker renders. */\nexport interface ModelStatus {\n /** Canonical provider model id, e.g. \"claude-fable-5\". */\n id: string;\n /** Short/tier alias, e.g. \"fable\" (the first registered alias). */\n alias?: string;\n /** \"anthropic\" | \"openai\" | \"gemini\" | \"mistral\" | … */\n provider: string;\n available: boolean;\n status: AvailabilityStatus;\n /** Friendly reason, e.g. \"suspended — US export-control directive (2026-06-12)\". */\n note?: string;\n source: AvailabilitySource;\n}\n\n/** Result of resolveModel — the spawn / call path consumes this synchronously. */\nexport interface ResolveResult {\n /** True when the requested model itself is available. */\n ok: boolean;\n /** The id to actually use: `requested` when ok, else the first available fallback. */\n model: string;\n /** What the caller asked for (id or alias, normalized to the canonical id). */\n requested: string;\n provider?: string;\n /** True when `model` differs from `requested` because we fell back. */\n fellBack: boolean;\n status: AvailabilityStatus;\n /** Why it degraded / why it is unavailable. */\n reason?: string;\n}\n\n/** Thrown by resolveModel when the requested model is unavailable, no usable\n * fallback exists, and the caller passed `throwIfUnavailable`. Callers flag on\n * `.code === \"model_unavailable\"`. */\nexport class ModelUnavailableError extends Error {\n readonly code = \"model_unavailable\";\n readonly requested: string;\n readonly provider?: string;\n readonly note?: string;\n constructor(requested: string, note?: string, provider?: string) {\n super(`model \"${requested}\" is unavailable${note ? ` (${note})` : \"\"}`);\n this.name = \"ModelUnavailableError\";\n this.requested = requested;\n this.note = note;\n this.provider = provider;\n }\n}\n","// F022 — the synchronous, zero-I/O resolve + status read. This is the spawn /\n// call hot path (buddy's launcher calls resolveModel per spawn, cardmem #4842):\n// it MUST never await and never touch the network. Freshness comes only from a\n// prior async refreshAvailability(); resolve just reads the in-memory registry.\nimport { allEntries, canonicalId, getEntry } from \"./registry.js\";\nimport { ModelUnavailableError } from \"./types.js\";\nimport type { ModelStatus, ResolveResult } from \"./types.js\";\n\nexport interface ResolveOptions {\n /** One id/alias or an ordered chain to try when `requested` is unavailable. */\n fallback?: string | string[];\n /** Scope hint (passed through to the result); does not gate lookup. */\n provider?: string;\n /** Throw ModelUnavailableError instead of returning ok:false when there is no\n * usable fallback. For callers that want to flag rather than degrade. */\n throwIfUnavailable?: boolean;\n /** Treat an id we do not track as UNUSABLE instead of fail-open.\n *\n * Default is fail-open: we never block a model we simply do not track. That is\n * right for liveness, and wrong for a caller who is GATING — cms measured the\n * consequence: resolveModel(\"cheap\") answered {ok:true, model:\"cheap\"}, so a\n * consumer following our own instruction to gate on `ok` passed the gate and\n * then sent the literal string \"cheap\" to a provider as a model id. A\n * success-shaped non-answer is worse than an error, because an error gets\n * handled and a shape does not.\n *\n * Set this when you need \"a model you actually know about\". Off by default so\n * no existing caller changes behaviour. */\n requireKnown?: boolean;\n}\n\n/** The shared status read — UI pickers grey out `available:false` rows. */\nexport function listModels(opts: { provider?: string } = {}): ModelStatus[] {\n return allEntries(opts.provider);\n}\n\n/** Is this id/alias currently usable? Untracked ids are fail-open (true) unless\n * the caller asked for requireKnown. */\nfunction isAvailable(requested: string, requireKnown = false): boolean {\n const e = getEntry(requested);\n if (!e) return !requireKnown; // fail-open on unknown, unless gating\n return e.available;\n}\n\n/**\n * Resolve a requested model (id or alias) to one that is actually usable.\n * Synchronous + offline by contract (cardmem #4842) — reads the registry only.\n *\n * - Available → pass through ({ ok:true, fellBack:false }).\n * - Unavailable + a fallback that IS available → swap ({ ok:false, fellBack:true }).\n * - Unavailable + no usable fallback → throw (throwIfUnavailable) or return ok:false.\n * - Unknown id → treated available (never block a model we do not track).\n */\nexport function resolveModel(requested: string, opts: ResolveOptions = {}): ResolveResult {\n const id = canonicalId(requested) ?? requested;\n const entry = getEntry(requested);\n const provider = opts.provider ?? entry?.provider;\n\n if (isAvailable(requested, opts.requireKnown)) {\n return {\n ok: true,\n model: id,\n requested: id,\n provider,\n fellBack: false,\n status: entry?.status ?? \"unknown\",\n };\n }\n\n // Requested is suspended — walk the fallback chain for the first available one.\n const chain = opts.fallback === undefined ? [] : Array.isArray(opts.fallback) ? opts.fallback : [opts.fallback];\n for (const fb of chain) {\n if (isAvailable(fb, opts.requireKnown)) {\n const fbId = canonicalId(fb) ?? fb;\n return {\n ok: false,\n model: fbId,\n requested: id,\n provider,\n fellBack: true,\n status: entry?.status ?? \"suspended\",\n reason: entry?.note ?? `${id} is unavailable`,\n };\n }\n }\n\n // No usable fallback.\n const unknownAndGating = !entry && opts.requireKnown;\n const reason = unknownAndGating\n ? `${id} is not a model this registry knows — requireKnown was set, so it is not assumed usable`\n : (entry?.note ?? `${id} is unavailable`);\n if (opts.throwIfUnavailable) {\n throw new ModelUnavailableError(id, reason, provider);\n }\n return {\n ok: false,\n model: id,\n requested: id,\n provider,\n fellBack: false,\n status: entry?.status ?? \"unknown\",\n reason,\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -687,6 +687,7 @@ declare const chatInputSchema: z.ZodObject<{
|
|
|
687
687
|
responseFormat: z.ZodOptional<z.ZodEnum<["json", "text"]>>;
|
|
688
688
|
}, "strip", z.ZodTypeAny, {
|
|
689
689
|
system?: string | undefined;
|
|
690
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
690
691
|
prompt?: string | undefined;
|
|
691
692
|
messages?: {
|
|
692
693
|
role: "system" | "user" | "assistant" | "tool";
|
|
@@ -714,7 +715,6 @@ declare const chatInputSchema: z.ZodObject<{
|
|
|
714
715
|
purpose?: string | undefined;
|
|
715
716
|
maxTokens?: number | undefined;
|
|
716
717
|
responseFormat?: "text" | "json" | undefined;
|
|
717
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
718
718
|
override?: {
|
|
719
719
|
provider?: string | undefined;
|
|
720
720
|
model?: string | undefined;
|
|
@@ -728,6 +728,7 @@ declare const chatInputSchema: z.ZodObject<{
|
|
|
728
728
|
labels?: Record<string, string> | undefined;
|
|
729
729
|
}, {
|
|
730
730
|
system?: string | undefined;
|
|
731
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
731
732
|
prompt?: string | undefined;
|
|
732
733
|
messages?: {
|
|
733
734
|
role: "system" | "user" | "assistant" | "tool";
|
|
@@ -755,7 +756,6 @@ declare const chatInputSchema: z.ZodObject<{
|
|
|
755
756
|
purpose?: string | undefined;
|
|
756
757
|
maxTokens?: number | undefined;
|
|
757
758
|
responseFormat?: "text" | "json" | undefined;
|
|
758
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
759
759
|
override?: {
|
|
760
760
|
provider?: string | undefined;
|
|
761
761
|
model?: string | undefined;
|
|
@@ -808,9 +808,9 @@ declare const visionInputSchema: z.ZodObject<{
|
|
|
808
808
|
image: string | Uint8Array<ArrayBuffer>;
|
|
809
809
|
prompt: string;
|
|
810
810
|
system?: string | undefined;
|
|
811
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
811
812
|
mimeType?: string | undefined;
|
|
812
813
|
purpose?: string | undefined;
|
|
813
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
814
814
|
override?: {
|
|
815
815
|
provider?: string | undefined;
|
|
816
816
|
model?: string | undefined;
|
|
@@ -826,9 +826,9 @@ declare const visionInputSchema: z.ZodObject<{
|
|
|
826
826
|
image: string | Uint8Array<ArrayBuffer>;
|
|
827
827
|
prompt: string;
|
|
828
828
|
system?: string | undefined;
|
|
829
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
829
830
|
mimeType?: string | undefined;
|
|
830
831
|
purpose?: string | undefined;
|
|
831
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
832
832
|
override?: {
|
|
833
833
|
provider?: string | undefined;
|
|
834
834
|
model?: string | undefined;
|
|
@@ -880,9 +880,9 @@ declare const videoInputSchema: z.ZodObject<{
|
|
|
880
880
|
video: string | Uint8Array<ArrayBuffer>;
|
|
881
881
|
prompt: string;
|
|
882
882
|
system?: string | undefined;
|
|
883
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
883
884
|
mimeType?: string | undefined;
|
|
884
885
|
purpose?: string | undefined;
|
|
885
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
886
886
|
override?: {
|
|
887
887
|
provider?: string | undefined;
|
|
888
888
|
model?: string | undefined;
|
|
@@ -898,9 +898,9 @@ declare const videoInputSchema: z.ZodObject<{
|
|
|
898
898
|
video: string | Uint8Array<ArrayBuffer>;
|
|
899
899
|
prompt: string;
|
|
900
900
|
system?: string | undefined;
|
|
901
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
901
902
|
mimeType?: string | undefined;
|
|
902
903
|
purpose?: string | undefined;
|
|
903
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
904
904
|
override?: {
|
|
905
905
|
provider?: string | undefined;
|
|
906
906
|
model?: string | undefined;
|
|
@@ -949,8 +949,8 @@ declare const translateInputSchema: z.ZodObject<{
|
|
|
949
949
|
}, "strip", z.ZodTypeAny, {
|
|
950
950
|
text: string;
|
|
951
951
|
to: string;
|
|
952
|
-
purpose?: string | undefined;
|
|
953
952
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
953
|
+
purpose?: string | undefined;
|
|
954
954
|
override?: {
|
|
955
955
|
provider?: string | undefined;
|
|
956
956
|
model?: string | undefined;
|
|
@@ -966,8 +966,8 @@ declare const translateInputSchema: z.ZodObject<{
|
|
|
966
966
|
}, {
|
|
967
967
|
text: string;
|
|
968
968
|
to: string;
|
|
969
|
-
purpose?: string | undefined;
|
|
970
969
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
970
|
+
purpose?: string | undefined;
|
|
971
971
|
override?: {
|
|
972
972
|
provider?: string | undefined;
|
|
973
973
|
model?: string | undefined;
|
|
@@ -1045,6 +1045,7 @@ declare const imageInputSchema: z.ZodObject<{
|
|
|
1045
1045
|
retryOnBlack: z.ZodOptional<z.ZodBoolean>;
|
|
1046
1046
|
}, "strip", z.ZodTypeAny, {
|
|
1047
1047
|
prompt: string;
|
|
1048
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1048
1049
|
seed?: number | undefined;
|
|
1049
1050
|
purpose?: string | undefined;
|
|
1050
1051
|
loras?: {
|
|
@@ -1054,7 +1055,6 @@ declare const imageInputSchema: z.ZodObject<{
|
|
|
1054
1055
|
lora?: string | undefined;
|
|
1055
1056
|
width?: number | undefined;
|
|
1056
1057
|
height?: number | undefined;
|
|
1057
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1058
1058
|
override?: {
|
|
1059
1059
|
provider?: string | undefined;
|
|
1060
1060
|
model?: string | undefined;
|
|
@@ -1074,6 +1074,7 @@ declare const imageInputSchema: z.ZodObject<{
|
|
|
1074
1074
|
retryOnBlack?: boolean | undefined;
|
|
1075
1075
|
}, {
|
|
1076
1076
|
prompt: string;
|
|
1077
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1077
1078
|
seed?: number | undefined;
|
|
1078
1079
|
purpose?: string | undefined;
|
|
1079
1080
|
loras?: {
|
|
@@ -1083,7 +1084,6 @@ declare const imageInputSchema: z.ZodObject<{
|
|
|
1083
1084
|
lora?: string | undefined;
|
|
1084
1085
|
width?: number | undefined;
|
|
1085
1086
|
height?: number | undefined;
|
|
1086
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1087
1087
|
override?: {
|
|
1088
1088
|
provider?: string | undefined;
|
|
1089
1089
|
model?: string | undefined;
|
|
@@ -1142,10 +1142,10 @@ declare const animateInputSchema: z.ZodObject<{
|
|
|
1142
1142
|
resolution: z.ZodOptional<z.ZodString>;
|
|
1143
1143
|
}, "strip", z.ZodTypeAny, {
|
|
1144
1144
|
image: string | Uint8Array<ArrayBuffer>;
|
|
1145
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1145
1146
|
prompt?: string | undefined;
|
|
1146
1147
|
resolution?: string | undefined;
|
|
1147
1148
|
purpose?: string | undefined;
|
|
1148
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1149
1149
|
override?: {
|
|
1150
1150
|
provider?: string | undefined;
|
|
1151
1151
|
model?: string | undefined;
|
|
@@ -1160,10 +1160,10 @@ declare const animateInputSchema: z.ZodObject<{
|
|
|
1160
1160
|
durationSec?: number | undefined;
|
|
1161
1161
|
}, {
|
|
1162
1162
|
image: string | Uint8Array<ArrayBuffer>;
|
|
1163
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1163
1164
|
prompt?: string | undefined;
|
|
1164
1165
|
resolution?: string | undefined;
|
|
1165
1166
|
purpose?: string | undefined;
|
|
1166
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1167
1167
|
override?: {
|
|
1168
1168
|
provider?: string | undefined;
|
|
1169
1169
|
model?: string | undefined;
|
|
@@ -1216,9 +1216,9 @@ declare const trainStyleInputSchema: z.ZodObject<{
|
|
|
1216
1216
|
createMasks: z.ZodOptional<z.ZodBoolean>;
|
|
1217
1217
|
}, "strip", z.ZodTypeAny, {
|
|
1218
1218
|
images: string | string[];
|
|
1219
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1219
1220
|
purpose?: string | undefined;
|
|
1220
1221
|
steps?: number | undefined;
|
|
1221
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1222
1222
|
override?: {
|
|
1223
1223
|
provider?: string | undefined;
|
|
1224
1224
|
model?: string | undefined;
|
|
@@ -1235,9 +1235,9 @@ declare const trainStyleInputSchema: z.ZodObject<{
|
|
|
1235
1235
|
createMasks?: boolean | undefined;
|
|
1236
1236
|
}, {
|
|
1237
1237
|
images: string | string[];
|
|
1238
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1238
1239
|
purpose?: string | undefined;
|
|
1239
1240
|
steps?: number | undefined;
|
|
1240
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1241
1241
|
override?: {
|
|
1242
1242
|
provider?: string | undefined;
|
|
1243
1243
|
model?: string | undefined;
|
|
@@ -1286,8 +1286,8 @@ declare const embeddingInputSchema: z.ZodObject<{
|
|
|
1286
1286
|
text: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>;
|
|
1287
1287
|
}, "strip", z.ZodTypeAny, {
|
|
1288
1288
|
text: string | string[];
|
|
1289
|
-
purpose?: string | undefined;
|
|
1290
1289
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1290
|
+
purpose?: string | undefined;
|
|
1291
1291
|
override?: {
|
|
1292
1292
|
provider?: string | undefined;
|
|
1293
1293
|
model?: string | undefined;
|
|
@@ -1301,8 +1301,8 @@ declare const embeddingInputSchema: z.ZodObject<{
|
|
|
1301
1301
|
labels?: Record<string, string> | undefined;
|
|
1302
1302
|
}, {
|
|
1303
1303
|
text: string | string[];
|
|
1304
|
-
purpose?: string | undefined;
|
|
1305
1304
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1305
|
+
purpose?: string | undefined;
|
|
1306
1306
|
override?: {
|
|
1307
1307
|
provider?: string | undefined;
|
|
1308
1308
|
model?: string | undefined;
|
|
@@ -1359,9 +1359,9 @@ declare const transcribeInputSchema: z.ZodObject<{
|
|
|
1359
1359
|
timestamps: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["word", "segment"]>, z.ZodArray<z.ZodEnum<["word", "segment"]>, "many">]>>;
|
|
1360
1360
|
}, "strip", z.ZodTypeAny, {
|
|
1361
1361
|
audio: string | Uint8Array<ArrayBuffer>;
|
|
1362
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1362
1363
|
language?: string | undefined;
|
|
1363
1364
|
purpose?: string | undefined;
|
|
1364
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1365
1365
|
override?: {
|
|
1366
1366
|
provider?: string | undefined;
|
|
1367
1367
|
model?: string | undefined;
|
|
@@ -1378,9 +1378,9 @@ declare const transcribeInputSchema: z.ZodObject<{
|
|
|
1378
1378
|
timestamps?: "word" | "segment" | ("word" | "segment")[] | undefined;
|
|
1379
1379
|
}, {
|
|
1380
1380
|
audio: string | Uint8Array<ArrayBuffer>;
|
|
1381
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1381
1382
|
language?: string | undefined;
|
|
1382
1383
|
purpose?: string | undefined;
|
|
1383
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1384
1384
|
override?: {
|
|
1385
1385
|
provider?: string | undefined;
|
|
1386
1386
|
model?: string | undefined;
|
|
@@ -1432,9 +1432,9 @@ declare const ocrInputSchema: z.ZodObject<{
|
|
|
1432
1432
|
mimeType: z.ZodOptional<z.ZodString>;
|
|
1433
1433
|
}, "strip", z.ZodTypeAny, {
|
|
1434
1434
|
document: string | Uint8Array<ArrayBuffer>;
|
|
1435
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1435
1436
|
mimeType?: string | undefined;
|
|
1436
1437
|
purpose?: string | undefined;
|
|
1437
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1438
1438
|
override?: {
|
|
1439
1439
|
provider?: string | undefined;
|
|
1440
1440
|
model?: string | undefined;
|
|
@@ -1448,9 +1448,9 @@ declare const ocrInputSchema: z.ZodObject<{
|
|
|
1448
1448
|
labels?: Record<string, string> | undefined;
|
|
1449
1449
|
}, {
|
|
1450
1450
|
document: string | Uint8Array<ArrayBuffer>;
|
|
1451
|
+
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1451
1452
|
mimeType?: string | undefined;
|
|
1452
1453
|
purpose?: string | undefined;
|
|
1453
|
-
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1454
1454
|
override?: {
|
|
1455
1455
|
provider?: string | undefined;
|
|
1456
1456
|
model?: string | undefined;
|
|
@@ -1496,8 +1496,8 @@ declare const moderationInputSchema: z.ZodObject<{
|
|
|
1496
1496
|
input: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>;
|
|
1497
1497
|
}, "strip", z.ZodTypeAny, {
|
|
1498
1498
|
input: string | string[];
|
|
1499
|
-
purpose?: string | undefined;
|
|
1500
1499
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1500
|
+
purpose?: string | undefined;
|
|
1501
1501
|
override?: {
|
|
1502
1502
|
provider?: string | undefined;
|
|
1503
1503
|
model?: string | undefined;
|
|
@@ -1511,8 +1511,8 @@ declare const moderationInputSchema: z.ZodObject<{
|
|
|
1511
1511
|
labels?: Record<string, string> | undefined;
|
|
1512
1512
|
}, {
|
|
1513
1513
|
input: string | string[];
|
|
1514
|
-
purpose?: string | undefined;
|
|
1515
1514
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1515
|
+
purpose?: string | undefined;
|
|
1516
1516
|
override?: {
|
|
1517
1517
|
provider?: string | undefined;
|
|
1518
1518
|
model?: string | undefined;
|
|
@@ -1573,8 +1573,8 @@ declare const podcastInputSchema: z.ZodObject<{
|
|
|
1573
1573
|
speaker: string;
|
|
1574
1574
|
}[];
|
|
1575
1575
|
voices: Record<string, string>;
|
|
1576
|
-
purpose?: string | undefined;
|
|
1577
1576
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1577
|
+
purpose?: string | undefined;
|
|
1578
1578
|
override?: {
|
|
1579
1579
|
provider?: string | undefined;
|
|
1580
1580
|
model?: string | undefined;
|
|
@@ -1593,8 +1593,8 @@ declare const podcastInputSchema: z.ZodObject<{
|
|
|
1593
1593
|
speaker: string;
|
|
1594
1594
|
}[];
|
|
1595
1595
|
voices: Record<string, string>;
|
|
1596
|
-
purpose?: string | undefined;
|
|
1597
1596
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1597
|
+
purpose?: string | undefined;
|
|
1598
1598
|
override?: {
|
|
1599
1599
|
provider?: string | undefined;
|
|
1600
1600
|
model?: string | undefined;
|
|
@@ -1640,14 +1640,25 @@ declare const ttsInputSchema: z.ZodObject<{
|
|
|
1640
1640
|
labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
1641
1641
|
text: z.ZodString;
|
|
1642
1642
|
voice: z.ZodString;
|
|
1643
|
+
/** F037: voice to use if `voice` is one we know the provider has retired. Without
|
|
1644
|
+
* it a retired voice throws VoiceUnavailableError rather than reaching the API.
|
|
1645
|
+
*
|
|
1646
|
+
* THINK BEFORE SETTING THIS. It is right for batch work where any acceptable voice
|
|
1647
|
+
* will do (a generated podcast, a bulk render). It is WRONG where the voice is an
|
|
1648
|
+
* identity a human recognises — a brand voice, a house narrator: falling back means
|
|
1649
|
+
* your product suddenly speaks with a stranger's voice and says nothing about why.
|
|
1650
|
+
* There, leave it unset and let the throw alarm you. Silence WITH a message beats
|
|
1651
|
+
* the wrong audio WITHOUT one. (torrent-search-api's call on their own house voice,
|
|
1652
|
+
* 2026-08-11 — they took the alarm over the fallback, deliberately.) */
|
|
1653
|
+
voiceFallback: z.ZodOptional<z.ZodString>;
|
|
1643
1654
|
lang: z.ZodOptional<z.ZodString>;
|
|
1644
1655
|
format: z.ZodOptional<z.ZodString>;
|
|
1645
1656
|
rate: z.ZodOptional<z.ZodNumber>;
|
|
1646
1657
|
}, "strip", z.ZodTypeAny, {
|
|
1647
1658
|
text: string;
|
|
1648
1659
|
voice: string;
|
|
1649
|
-
purpose?: string | undefined;
|
|
1650
1660
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1661
|
+
purpose?: string | undefined;
|
|
1651
1662
|
override?: {
|
|
1652
1663
|
provider?: string | undefined;
|
|
1653
1664
|
model?: string | undefined;
|
|
@@ -1660,13 +1671,14 @@ declare const ttsInputSchema: z.ZodObject<{
|
|
|
1660
1671
|
})[] | undefined;
|
|
1661
1672
|
labels?: Record<string, string> | undefined;
|
|
1662
1673
|
format?: string | undefined;
|
|
1674
|
+
voiceFallback?: string | undefined;
|
|
1663
1675
|
lang?: string | undefined;
|
|
1664
1676
|
rate?: number | undefined;
|
|
1665
1677
|
}, {
|
|
1666
1678
|
text: string;
|
|
1667
1679
|
voice: string;
|
|
1668
|
-
purpose?: string | undefined;
|
|
1669
1680
|
tier?: "fast" | "smart" | "powerful" | "cheap" | "vision" | "video" | "embedding" | undefined;
|
|
1681
|
+
purpose?: string | undefined;
|
|
1670
1682
|
override?: {
|
|
1671
1683
|
provider?: string | undefined;
|
|
1672
1684
|
model?: string | undefined;
|
|
@@ -1679,6 +1691,7 @@ declare const ttsInputSchema: z.ZodObject<{
|
|
|
1679
1691
|
})[] | undefined;
|
|
1680
1692
|
labels?: Record<string, string> | undefined;
|
|
1681
1693
|
format?: string | undefined;
|
|
1694
|
+
voiceFallback?: string | undefined;
|
|
1682
1695
|
lang?: string | undefined;
|
|
1683
1696
|
rate?: number | undefined;
|
|
1684
1697
|
}>;
|
|
@@ -2048,8 +2061,8 @@ declare const falStubAdapter: ProviderAdapter;
|
|
|
2048
2061
|
* wires the live adapters. */
|
|
2049
2062
|
declare const stubProviders: Record<string, ProviderAdapter>;
|
|
2050
2063
|
|
|
2051
|
-
declare const VERSION: "0.
|
|
2052
|
-
declare const SDK_TAG: "@broberg/ai-sdk@0.
|
|
2064
|
+
declare const VERSION: "0.29.0";
|
|
2065
|
+
declare const SDK_TAG: "@broberg/ai-sdk@0.29.0";
|
|
2053
2066
|
|
|
2054
2067
|
/** Built-in defaults. Every entry is overridable via AiConfig.defaults or a
|
|
2055
2068
|
* per-call override.
|
|
@@ -2102,6 +2115,88 @@ declare function refreshAvailability(opts?: RefreshOptions): Promise<RefreshResu
|
|
|
2102
2115
|
/** Reset the overlay back to the curated defaults. For tests. */
|
|
2103
2116
|
declare function resetRegistry(): void;
|
|
2104
2117
|
|
|
2118
|
+
type VoiceStatus = "available" | "retired" | "unknown";
|
|
2119
|
+
type VoiceProvider = "elevenlabs" | "azure";
|
|
2120
|
+
/** One row of the shared voice read — what a UI voice-picker renders. */
|
|
2121
|
+
interface VoiceInfo {
|
|
2122
|
+
/** Full provider voice id, e.g. "da-DK-ChristelNeural" / "4RklGmuxoAskAbGXplXN". */
|
|
2123
|
+
id: string;
|
|
2124
|
+
/** Curated friendly name a caller passes as `voice`, e.g. "christel". */
|
|
2125
|
+
name: string;
|
|
2126
|
+
provider: VoiceProvider;
|
|
2127
|
+
/** BCP-47 locale of the voice itself, e.g. "da-DK". NB: an Azure multilingual
|
|
2128
|
+
* voice speaking Danish reports its own locale ("de-DE" for Seraphina) — that
|
|
2129
|
+
* is what the adapter actually sends as xml:lang. */
|
|
2130
|
+
locale: string;
|
|
2131
|
+
/** Only where the provider publishes it — absent is "we do not know", never a
|
|
2132
|
+
* guess from the first name. */
|
|
2133
|
+
gender?: "female" | "male";
|
|
2134
|
+
available: boolean;
|
|
2135
|
+
status: VoiceStatus;
|
|
2136
|
+
/** Why it is unavailable, or any caveat worth showing in a picker. */
|
|
2137
|
+
note?: string;
|
|
2138
|
+
/** ISO date this row's status was last confirmed AGAINST THE PROVIDER. Exposed
|
|
2139
|
+
* on purpose (the F034.1 lesson): a registry that cannot be seen to go stale
|
|
2140
|
+
* is worse than one that can, because nobody knows when to re-check it. */
|
|
2141
|
+
checkedAt: string;
|
|
2142
|
+
}
|
|
2143
|
+
/** Result of checkVoice — deliberately the same shape as ResolveResult (F022) so
|
|
2144
|
+
* a consumer learns one idiom for models and voices. */
|
|
2145
|
+
interface VoiceResolveResult {
|
|
2146
|
+
/** True when the requested voice itself is usable. */
|
|
2147
|
+
ok: boolean;
|
|
2148
|
+
/** The id to actually send: the requested voice's id when ok, else the
|
|
2149
|
+
* fallback's. When there is no usable fallback this is the dead id and `ok`
|
|
2150
|
+
* is false — mirroring resolveModel, the caller must read `ok`. */
|
|
2151
|
+
voiceId: string;
|
|
2152
|
+
/** What the caller asked for, verbatim. */
|
|
2153
|
+
requested: string;
|
|
2154
|
+
provider?: VoiceProvider;
|
|
2155
|
+
/** True when `voiceId` differs from what was requested because we fell back. */
|
|
2156
|
+
fellBack: boolean;
|
|
2157
|
+
status: VoiceStatus;
|
|
2158
|
+
/** Why it degraded / why it is unavailable. */
|
|
2159
|
+
reason?: string;
|
|
2160
|
+
}
|
|
2161
|
+
/** Thrown when the requested voice is retired and no usable fallback exists.
|
|
2162
|
+
* Callers flag on `.code === "voice_unavailable"`. */
|
|
2163
|
+
declare class VoiceUnavailableError extends Error {
|
|
2164
|
+
readonly code = "voice_unavailable";
|
|
2165
|
+
readonly requested: string;
|
|
2166
|
+
readonly provider?: VoiceProvider;
|
|
2167
|
+
readonly note?: string;
|
|
2168
|
+
constructor(requested: string, note?: string, provider?: VoiceProvider);
|
|
2169
|
+
}
|
|
2170
|
+
|
|
2171
|
+
interface CheckVoiceOptions {
|
|
2172
|
+
/** One name/id or an ordered chain to try when `requested` is retired. */
|
|
2173
|
+
fallback?: string | string[];
|
|
2174
|
+
/** Throw VoiceUnavailableError instead of returning ok:false when nothing in the
|
|
2175
|
+
* chain is usable. For callers that want to fail loudly rather than degrade. */
|
|
2176
|
+
throwIfUnavailable?: boolean;
|
|
2177
|
+
}
|
|
2178
|
+
/**
|
|
2179
|
+
* The shared voice read — a UI picker greys out `available:false` rows and can show
|
|
2180
|
+
* `checkedAt` so a stale registry is visible rather than silently trusted.
|
|
2181
|
+
*
|
|
2182
|
+
* NB: distinct from `elevenlabsAdapter().listVoices()`, which is an async call to
|
|
2183
|
+
* ElevenLabs' live API. This one is synchronous, cross-provider, and reads only the
|
|
2184
|
+
* curated registry.
|
|
2185
|
+
*/
|
|
2186
|
+
declare function listVoices(opts?: {
|
|
2187
|
+
provider?: VoiceProvider;
|
|
2188
|
+
}): VoiceInfo[];
|
|
2189
|
+
/**
|
|
2190
|
+
* Resolve a requested voice (curated name or raw provider id) to one that is
|
|
2191
|
+
* actually usable. Synchronous + offline by contract.
|
|
2192
|
+
*
|
|
2193
|
+
* - Available → pass through ({ ok:true, fellBack:false }).
|
|
2194
|
+
* - Retired + a usable fallback → swap ({ ok:false, fellBack:true }).
|
|
2195
|
+
* - Retired + no usable fallback → throw (throwIfUnavailable) or return ok:false.
|
|
2196
|
+
* - Untracked id → treated usable ({ status:"unknown" }), passed through verbatim.
|
|
2197
|
+
*/
|
|
2198
|
+
declare function checkVoice(requested: string, opts?: CheckVoiceOptions): VoiceResolveResult;
|
|
2199
|
+
|
|
2105
2200
|
/**
|
|
2106
2201
|
* Cost in USD for a call. cache-read/creation tokens are priced separately when
|
|
2107
2202
|
* the pricing entry defines rates for them; otherwise they fall back to the
|
|
@@ -2376,4 +2471,4 @@ interface StreamTransportRequest extends TransportRequest {
|
|
|
2376
2471
|
*/
|
|
2377
2472
|
declare function streamTransport(req: StreamTransportRequest): AsyncIterable<string>;
|
|
2378
2473
|
|
|
2379
|
-
export { AZURE_DANISH_VOICES, AZURE_DANISH_VOICE_LIST, type AiClient, type AiConfig, type AzureVoiceInfo, type BatchJob, type BatchRequestItem, type BatchResultItem, type BflAdapterConfig, type BflCredits, type BudgetConfig, BudgetExceededError, BudgetGuard, type BudgetStore, type CallOptions, type Capability, type ChatInput, type ChatRequest, type ChatResult, type ChatStreamEvent, type ClassifyInput, type ClassifyResult, type ContentPart, type Contracts, type CostQuery, type CostSink, type CostSummary, type CostSummaryQuery, type CostTimeseriesQuery, DEFAULT_TIER_MAP, type DesignInput, type DesignResult, type DialogueRequest, type DialogueTurn, type DiscordSinkConfig, ELEVENLABS_DANISH_VOICES, type EmbeddingInput, type EmbeddingRequest, type EmbeddingResult, type ExtractInput, type ExtractResult, type FalAdapterConfig, type HttpResponse, type ImageInput, type ImageRequest, type ImageResult, type LoraWeight, type Message, type MockupInput, type MockupResult, type ModerationInput, type ModerationItem, type ModerationRequest, type ModerationResult, type OcrInput, type OcrPage, type OcrRequest, type OcrResult, type OpenAICompatibleConfig, type PodcastInput, type PodcastResult, type PricingEntry, type ProviderAdapter, type RefreshOptions, type RefreshResult, type RerankInput, type RerankResult, type Role, SDK_TAG, type SqliteBudgetStoreConfig, type SqliteSinkConfig, StreamHttpError, type SubprocessResponse, type Tier, type TierSpec, type Tool, type ToolCall, type TrainStyleInput, type TrainStyleRequest, type TrainStyleResult, type TranscribeInput, type TranscribeRequest, type TranscribeResult, type TranslateInput, type TranslateResult, type Transport, type TransportRequest, type TransportResponse, type TtsInput, type TtsRequest, type UpmetricsCostClientConfig, UpmetricsCostError, type UpmetricsCostRow, type UpmetricsCostSummary, type UpmetricsCostTimeseries, type UpmetricsSinkConfig, type Usage, VERSION, type VideoInput, type VisionInput, aiConfigSchema, anthropicAdapter, anthropicApiAdapter, anthropicSubprocessAdapter, azureAdapter, bflAdapter, bflCredits, chatInputSchema, computeCost, createAI, deepinfraAdapter, deeplAdapter, deepseekAdapter, defaultProviders, discordSink, elevenlabsAdapter, embeddingInputSchema, falAdapter, falStubAdapter, freshUsage, fromProviderToolCall, geminiAdapter, getCostSummary, getPrice, httpTransport, imageInputSchema, listAzureDanishVoices, makeContracts, makeOpenAICompatibleAdapter, messageSchema, mistralAdapter, mistralStubAdapter, multiSink, noopSink, openaiAdapter, openaiStubAdapter, openrouterAdapter, parseClaudeCliJson, parseJsonLoose, refreshAvailability, requestyAdapter, resetRefreshState, resetRegistry, resolveAzureVoice, resolveTier, resolveVoice, sqliteBudgetStore, sqliteSink, streamTransport, stubProviders, subprocessTransport, tierSpecSchema, toProviderTools, toolSchema, translateInputSchema, upmetricsCostClient, upmetricsSink, usdFromMicro, vertexAdapter, visionInputSchema };
|
|
2474
|
+
export { AZURE_DANISH_VOICES, AZURE_DANISH_VOICE_LIST, type AiClient, type AiConfig, type AzureVoiceInfo, type BatchJob, type BatchRequestItem, type BatchResultItem, type BflAdapterConfig, type BflCredits, type BudgetConfig, BudgetExceededError, BudgetGuard, type BudgetStore, type CallOptions, type Capability, type ChatInput, type ChatRequest, type ChatResult, type ChatStreamEvent, type CheckVoiceOptions, type ClassifyInput, type ClassifyResult, type ContentPart, type Contracts, type CostQuery, type CostSink, type CostSummary, type CostSummaryQuery, type CostTimeseriesQuery, DEFAULT_TIER_MAP, type DesignInput, type DesignResult, type DialogueRequest, type DialogueTurn, type DiscordSinkConfig, ELEVENLABS_DANISH_VOICES, type EmbeddingInput, type EmbeddingRequest, type EmbeddingResult, type ExtractInput, type ExtractResult, type FalAdapterConfig, type HttpResponse, type ImageInput, type ImageRequest, type ImageResult, type LoraWeight, type Message, type MockupInput, type MockupResult, type ModerationInput, type ModerationItem, type ModerationRequest, type ModerationResult, type OcrInput, type OcrPage, type OcrRequest, type OcrResult, type OpenAICompatibleConfig, type PodcastInput, type PodcastResult, type PricingEntry, type ProviderAdapter, type RefreshOptions, type RefreshResult, type RerankInput, type RerankResult, type Role, SDK_TAG, type SqliteBudgetStoreConfig, type SqliteSinkConfig, StreamHttpError, type SubprocessResponse, type Tier, type TierSpec, type Tool, type ToolCall, type TrainStyleInput, type TrainStyleRequest, type TrainStyleResult, type TranscribeInput, type TranscribeRequest, type TranscribeResult, type TranslateInput, type TranslateResult, type Transport, type TransportRequest, type TransportResponse, type TtsInput, type TtsRequest, type UpmetricsCostClientConfig, UpmetricsCostError, type UpmetricsCostRow, type UpmetricsCostSummary, type UpmetricsCostTimeseries, type UpmetricsSinkConfig, type Usage, VERSION, type VideoInput, type VisionInput, type VoiceInfo, type VoiceProvider, type VoiceResolveResult, type VoiceStatus, VoiceUnavailableError, aiConfigSchema, anthropicAdapter, anthropicApiAdapter, anthropicSubprocessAdapter, azureAdapter, bflAdapter, bflCredits, chatInputSchema, checkVoice, computeCost, createAI, deepinfraAdapter, deeplAdapter, deepseekAdapter, defaultProviders, discordSink, elevenlabsAdapter, embeddingInputSchema, falAdapter, falStubAdapter, freshUsage, fromProviderToolCall, geminiAdapter, getCostSummary, getPrice, httpTransport, imageInputSchema, listAzureDanishVoices, listVoices, makeContracts, makeOpenAICompatibleAdapter, messageSchema, mistralAdapter, mistralStubAdapter, multiSink, noopSink, openaiAdapter, openaiStubAdapter, openrouterAdapter, parseClaudeCliJson, parseJsonLoose, refreshAvailability, requestyAdapter, resetRefreshState, resetRegistry, resolveAzureVoice, resolveTier, resolveVoice, sqliteBudgetStore, sqliteSink, streamTransport, stubProviders, subprocessTransport, tierSpecSchema, toProviderTools, toolSchema, translateInputSchema, upmetricsCostClient, upmetricsSink, usdFromMicro, vertexAdapter, visionInputSchema };
|