@wrenautomation/models 0.1.0 → 0.7.1

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 CHANGED
@@ -10,8 +10,8 @@ a new price goes here, never in the caller. No guard enforces this; this file an
10
10
 
11
11
  | Import | Does | Runs in |
12
12
  |---|---|---|
13
- | `@wrenautomation/models` | `Model`, `Part`, `Usage`; `anthropic`, `gemini`, `cohere`, `compatible` (Groq, OpenRouter, Mistral, Cerebras, OpenAI), `gateway`; `rotating` key rings; `fakeModel`, `scriptedModel`; the errors | Node, Workers |
14
- | `@wrenautomation/models/hear` | speech to text: `groqEar`, `cohereEar`, `compatibleEar` (any `/audio/transcriptions` server) | Node, Workers |
13
+ | `@wrenautomation/models` | `Model`, `Part`, `Usage`; `anthropic`, `gemini`, `cohere`, `compatible` (Groq, OpenRouter, Mistral, Cerebras, OpenAI), `gateway`; `rotating` key rings, `fallback` model order, `geminiLiveKeys`, `geminiFile` (Files API upload); `fakeModel`, `scriptedModel`; the errors | Node, Workers |
14
+ | `@wrenautomation/models/hear` | speech to text: `groqEar`, `cohereEar`, `compatibleEar` (any `/audio/transcriptions` server); `fakeEar` | Node, Workers |
15
15
  | `@wrenautomation/models/prices` | one price table: `MODEL_PRICES`, `SPEECH_PRICES`, `priceUsd`, `priced`, `speechUsd`, `addUsage`, `pricesText` | Node, Workers |
16
16
  | `@wrenautomation/models/command` | a shell command as a model (`commandModel`), Claude Code on the subscription (`claudeCode`) | Node |
17
17
  | `@wrenautomation/models/spec` | a model from a setting string: `modelFromSpec("anthropic:sonnet", env)` | Node |
@@ -19,7 +19,7 @@ a new price goes here, never in the caller. No guard enforces this; this file an
19
19
  ## Use
20
20
 
21
21
  ```ts
22
- import { anthropic, gemini } from "@wrenautomation/models";
22
+ import { anthropic, fallback, gemini } from "@wrenautomation/models";
23
23
  import { z } from "zod";
24
24
 
25
25
  const claude = anthropic({ key: [key1, key2], model: "sonnet" });
@@ -34,8 +34,27 @@ const reply = await eyes.complete({
34
34
  ],
35
35
  effort: "low",
36
36
  });
37
+
38
+ // A stretch of a YouTube video, sampled at one frame per 2 s, at low resolution.
39
+ const clip = await eyes.complete({
40
+ prompt: [
41
+ { type: "video", data: new URL(youtubeUrl), mediaType: "video/mp4", clip: { startS: 60, endS: 90, fps: 0.5 } },
42
+ { type: "text", text: "What is said and shown?" },
43
+ ],
44
+ resolution: "low",
45
+ });
46
+
47
+ // Newest model first; each call starts at the top and moves down past a busy or refused one.
48
+ const reader = fallback([gemini({ key, model: "gemini-3.8-flash" }), gemini({ key })], { passes: 4 });
37
49
  ```
38
50
 
51
+ Gemini reads a clipped video on generateContent: `withClips` adds the `videoMetadata` field the SDK
52
+ does not send. The Interactions API also reads a stretch, but on free keys its flash quota is spent
53
+ at once (seen 2026-10-27; flash-lite answered).
54
+
55
+ A file too large to send inline goes up once with `geminiFile`. It lives in one key's project, so
56
+ read its `part` with a Gemini model on `file.key` alone, then `file.drop()`.
57
+
39
58
  Spec strings: `fake`, `claude-code[:model]`, `anthropic[:haiku|sonnet|opus|id]`, `gateway[:alias]`,
40
59
  `gemini[:id]`, `cohere[:id]`, `groq|openrouter|mistral|cerebras|openai[:id]`, `command:<shell command>`.
41
60
  Keys come from `<VENDOR>_API_KEY`, or a ring `NUM_<VENDOR>` + `<VENDOR>_API_KEY_1..n`.
@@ -52,10 +71,12 @@ name, so a host that holds two copies of this package still sorts them.
52
71
  | `InputRejected` | 400, 413, 422 | change the request |
53
72
  | `Unsupported` | a part kind the model does not take | pick another model; parts are never dropped |
54
73
  | `Cut` | the output cap stopped the answer | `partial` holds the text so far, `usage` its cost |
74
+ | `Filtered` | the vendor stopped the answer itself (Gemini's `RECITATION`, `SAFETY`, a failed run) | `stop` says which; ask in other words |
55
75
  | `NoAnswer` | `ask` found no object of the shape after its repairs | `issues` says why |
56
76
 
57
- A key ring moves past a refused or busy key at once. When every key is busy, it waits 2 s, then
58
- doubles up to 30 s, for `passes` passes (default 1). Retries inside the SDK are off.
77
+ A key ring moves past a refused or busy key at once, and passes over a refused key on later calls. When every key is busy, it waits 2 s, then
78
+ doubles up to 30 s, for `passes` passes (default 1). Retries inside the SDK are off. An error never carries the key: a vendor that echoes it (Gemini
79
+ does, on a suspended key) has it put out as `[key]`.
59
80
 
60
81
  ## Prices
61
82
 
package/dist/errors.d.ts CHANGED
@@ -3,7 +3,9 @@
3
3
  * a dropped connection). `Refused`: this key is bad (401, 402, 403); the key ring moves on.
4
4
  * `InputRejected`: the vendor refused this input (400, 413, 422); record it and go on.
5
5
  * `Unsupported`: the model cannot take a part it was given. `Cut`: the output cap stopped the
6
- * answer; the text so far and its tokens come with it. Each is checked by shape too (`isCut`):
6
+ * answer; the text so far and its tokens come with it. `Filtered`: the vendor stopped the answer
7
+ * itself (a safety or recitation filter, a failed run); `stop` says which, and asking in other
8
+ * words may pass. Each is checked by shape too (`isCut`):
7
9
  * a host may hold two copies of this package while its pins catch up.
8
10
  */
9
11
  import type { PartKind, Usage } from "./types.js";
@@ -34,7 +36,15 @@ export declare class Cut extends Error {
34
36
  readonly usage: Usage | undefined;
35
37
  constructor(message: string, partial: string, usage?: Usage);
36
38
  }
39
+ export declare class Filtered extends Error {
40
+ /** The vendor's stop reason (`RECITATION`, `SAFETY`, `refusal`). */
41
+ readonly stop: string;
42
+ readonly partial: string;
43
+ readonly usage: Usage | undefined;
44
+ constructor(message: string, stop: string, partial: string, usage?: Usage);
45
+ }
37
46
  export declare const isCut: (err: unknown) => err is Cut;
47
+ export declare const isFiltered: (err: unknown) => err is Filtered;
38
48
  export declare const isTransient: (err: unknown) => err is Transient;
39
49
  export declare const isRefused: (err: unknown) => err is Refused;
40
50
  export declare const isInputRejected: (err: unknown) => err is InputRejected;
@@ -46,5 +56,7 @@ export declare const transientStatus: (status: number) => boolean;
46
56
  export declare function statusError(message: string, status: number, retryAfter?: string | number | null): Error;
47
57
  /** The error for a response that is not ok. */
48
58
  export declare const httpError: (what: string, res: Response, detail?: string) => Error;
59
+ /** `text` with each secret (an API key) put out: a vendor may echo the key in its message. */
60
+ export declare const redact: (text: string, secrets?: readonly string[]) => string;
49
61
  /** A fetch that threw (the network, a timeout): always transient. */
50
62
  export declare const transport: (what: string, err: unknown) => Transient;
package/dist/errors.js CHANGED
@@ -43,8 +43,22 @@ export class Cut extends Error {
43
43
  this.usage = usage;
44
44
  }
45
45
  }
46
+ export class Filtered extends Error {
47
+ /** The vendor's stop reason (`RECITATION`, `SAFETY`, `refusal`). */
48
+ stop;
49
+ partial;
50
+ usage;
51
+ constructor(message, stop, partial, usage) {
52
+ super(message);
53
+ this.name = "Filtered";
54
+ this.stop = stop;
55
+ this.partial = partial;
56
+ this.usage = usage;
57
+ }
58
+ }
46
59
  const named = (err, name) => err instanceof Error && err.name === name;
47
60
  export const isCut = (err) => named(err, "Cut") && typeof err.partial === "string";
61
+ export const isFiltered = (err) => named(err, "Filtered") && typeof err.stop === "string";
48
62
  export const isTransient = (err) => named(err, "Transient");
49
63
  export const isRefused = (err) => named(err, "Refused");
50
64
  export const isInputRejected = (err) => named(err, "InputRejected");
@@ -74,6 +88,8 @@ export function statusError(message, status, retryAfter) {
74
88
  }
75
89
  /** The error for a response that is not ok. */
76
90
  export const httpError = (what, res, detail) => statusError(`${what}: HTTP ${res.status}${detail ? ` ${detail}` : ""}`, res.status, res.headers.get("retry-after"));
91
+ /** `text` with each secret (an API key) put out: a vendor may echo the key in its message. */
92
+ export const redact = (text, secrets = []) => secrets.reduce((t, s) => (s.length >= 8 ? t.split(s).join("[key]") : t), text);
77
93
  /** A fetch that threw (the network, a timeout): always transient. */
78
94
  export const transport = (what, err) => new Transient(`${what}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
79
95
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/fake.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Model, Request } from "./types.js";
2
- /** Answers each call from `respond` (the prompt's text and the system), or a fixed string. */
2
+ /** Answers each call from `respond` (the prompt's text and the request), or a fixed string. */
3
3
  export declare function fakeModel(respond?: string | ((prompt: string, req: Request) => string | Promise<string>), id?: string): Model;
4
4
  /** Answers from a fixed list, in order; an object answer is sent as its JSON. Throws past the end. */
5
5
  export declare function scriptedModel(answers: readonly unknown[], id?: string): Model;
package/dist/fake.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Models for tests and dry runs: no network, no keys. */
2
- import { modelOf, promptText } from "./model.js";
2
+ import { modelOf } from "./model.js";
3
3
  const reply = (text, model) => ({
4
4
  text,
5
5
  usage: {},
@@ -8,14 +8,18 @@ const reply = (text, model) => ({
8
8
  ms: 0,
9
9
  raw: { fake: true },
10
10
  });
11
- /** Answers each call from `respond` (the prompt's text and the system), or a fixed string. */
11
+ /** The prompt's text parts, joined; media parts are skipped (they are on `req.prompt`). */
12
+ const textOf = (prompt) => typeof prompt === "string"
13
+ ? prompt
14
+ : prompt.flatMap((p) => (p.type === "text" ? [p.text] : [])).join("\n\n");
15
+ /** Answers each call from `respond` (the prompt's text and the request), or a fixed string. */
12
16
  export function fakeModel(respond = "{}", id = "fake") {
13
17
  return modelOf({
14
18
  id,
15
19
  provider: "fake",
16
20
  takes: new Set(["text", "image", "video", "audio", "pdf"]),
17
21
  async complete(req) {
18
- const text = typeof respond === "string" ? respond : await respond(promptText(req.prompt) ?? "", req);
22
+ const text = typeof respond === "string" ? respond : await respond(textOf(req.prompt), req);
19
23
  return reply(text, id);
20
24
  },
21
25
  });
package/dist/fake.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGjD,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,KAAa,EAAS,EAAE,CAAC,CAAC;IACrD,IAAI;IACJ,KAAK,EAAE,EAAE;IACT,KAAK;IACL,IAAI,EAAE,UAAU;IAChB,EAAE,EAAE,CAAC;IACL,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;CACpB,CAAC,CAAC;AAEH,8FAA8F;AAC9F,MAAM,UAAU,SAAS,CACvB,UAAiF,IAAI,EACrF,EAAE,GAAG,MAAM;IAEX,OAAO,OAAO,CAAC;QACb,EAAE;QACF,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1D,KAAK,CAAC,QAAQ,CAAC,GAAG;YAChB,MAAM,IAAI,GACR,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;YAC3F,OAAO,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,aAAa,CAAC,OAA2B,EAAE,EAAE,GAAG,UAAU;IACxE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,SAAS,CAAC,GAAG,EAAE;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,KAAa,EAAS,EAAE,CAAC,CAAC;IACrD,IAAI;IACJ,KAAK,EAAE,EAAE;IACT,KAAK;IACL,IAAI,EAAE,UAAU;IAChB,EAAE,EAAE,CAAC;IACL,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;CACpB,CAAC,CAAC;AAEH,2FAA2F;AAC3F,MAAM,MAAM,GAAG,CAAC,MAAyB,EAAE,EAAE,CAC3C,OAAO,MAAM,KAAK,QAAQ;IACxB,CAAC,CAAC,MAAM;IACR,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE9E,+FAA+F;AAC/F,MAAM,UAAU,SAAS,CACvB,UAAiF,IAAI,EACrF,EAAE,GAAG,MAAM;IAEX,OAAO,OAAO,CAAC;QACb,EAAE;QACF,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1D,KAAK,CAAC,QAAQ,CAAC,GAAG;YAChB,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5F,OAAO,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,aAAa,CAAC,OAA2B,EAAE,EAAE,GAAG,UAAU;IACxE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,SAAS,CAAC,GAAG,EAAE;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
package/dist/hear.d.ts CHANGED
@@ -61,3 +61,5 @@ export declare const groqEar: (o: {
61
61
  rotate?: RotateOptions;
62
62
  fetch?: typeof fetch;
63
63
  }) => Ear;
64
+ /** An ear for tests and dry runs: no network, no keys. Answers each call from `respond`. */
65
+ export declare function fakeEar(respond?: string | ((audio: Audio, o: HearOptions) => string | Promise<string>), id?: string): Ear;
package/dist/hear.js CHANGED
@@ -92,4 +92,15 @@ export const groqEar = (o) => compatibleEar({
92
92
  ...(o.rotate ? { rotate: o.rotate } : {}),
93
93
  ...(o.fetch ? { fetch: o.fetch } : {}),
94
94
  });
95
+ /** An ear for tests and dry runs: no network, no keys. Answers each call from `respond`. */
96
+ export function fakeEar(respond = "", id = "fake:ear") {
97
+ return {
98
+ id,
99
+ model: id,
100
+ async hear(audio, o = {}) {
101
+ const text = typeof respond === "string" ? respond : await respond(audio, o);
102
+ return { text, model: id, ms: 0, usd: 0 };
103
+ },
104
+ };
105
+ }
95
106
  //# sourceMappingURL=hear.js.map
package/dist/hear.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hear.js","sourceRoot":"","sources":["../src/hear.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hear.js","sourceRoot":"","sources":["../src/hear.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export * from "./errors.js";
7
7
  export { fakeModel, scriptedModel } from "./fake.js";
8
- export { cursor, type EnvMap, fleetKeys, overRing, type RotateOptions, rotating } from "./keys.js";
8
+ export { cursor, type EnvMap, fallback, fleetKeys, overRing, type RotateOptions, rotating, } from "./keys.js";
9
9
  export { askWith, asRequest, checkParts, modelOf, promptText, TEXT_ONLY } from "./model.js";
10
10
  export { NoAnswer, parseAnswer, wellFormed } from "./parse.js";
11
11
  export { addUsage, priced } from "./prices.js";
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export * from "./errors.js";
7
7
  export { fakeModel, scriptedModel } from "./fake.js";
8
- export { cursor, fleetKeys, overRing, rotating } from "./keys.js";
8
+ export { cursor, fallback, fleetKeys, overRing, rotating, } from "./keys.js";
9
9
  export { askWith, asRequest, checkParts, modelOf, promptText, TEXT_ONLY } from "./model.js";
10
10
  export { NoAnswer, parseAnswer, wellFormed } from "./parse.js";
11
11
  export { addUsage, priced } from "./prices.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,MAAM,EAAe,SAAS,EAAE,QAAQ,EAAsB,QAAQ,EAAE,MAAM,WAAW,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAwB,QAAQ,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EACL,MAAM,EAEN,QAAQ,EACR,SAAS,EACT,QAAQ,EAER,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAwB,QAAQ,EAAE,MAAM,UAAU,CAAC"}
package/dist/keys.d.ts CHANGED
@@ -23,5 +23,14 @@ export interface RotateOptions {
23
23
  export declare function overRing<K, T>(ring: readonly K[], call: (k: K) => Promise<T>, start: () => number, o?: RotateOptions): Promise<T>;
24
24
  /** A round-robin cursor: each call returns the next index. */
25
25
  export declare const cursor: () => () => number;
26
- /** One model over several keys (one model per key), by `overRing`. */
26
+ /**
27
+ * One model over several keys (one model per key), by `overRing`. A key refused once (401, 402,
28
+ * 403: suspended, revoked) is passed over on later calls; when every key has been refused, the
29
+ * whole ring is tried again so the error is a live one.
30
+ */
27
31
  export declare function rotating(models: readonly Model[], o?: RotateOptions): Model;
32
+ /**
33
+ * Models in order of preference (`gemini-3.8-flash`, then `gemini-3.5-flash`): each call starts at
34
+ * the first and moves down past a busy or refused one. The reply's `model` names who answered.
35
+ */
36
+ export declare function fallback(models: readonly Model[], o?: RotateOptions): Model;
package/dist/keys.js CHANGED
@@ -55,7 +55,11 @@ export const cursor = () => {
55
55
  let n = 0;
56
56
  return () => n++;
57
57
  };
58
- /** One model over several keys (one model per key), by `overRing`. */
58
+ /**
59
+ * One model over several keys (one model per key), by `overRing`. A key refused once (401, 402,
60
+ * 403: suspended, revoked) is passed over on later calls; when every key has been refused, the
61
+ * whole ring is tried again so the error is a live one.
62
+ */
59
63
  export function rotating(models, o = {}) {
60
64
  const first = models[0];
61
65
  if (!first)
@@ -63,11 +67,44 @@ export function rotating(models, o = {}) {
63
67
  if (models.length === 1 && (o.passes ?? 1) <= 1)
64
68
  return first;
65
69
  const next = cursor();
70
+ const dead = new Set();
71
+ const call = (req) => async (m) => {
72
+ try {
73
+ return await m.complete(req);
74
+ }
75
+ catch (err) {
76
+ if (isRefused(err))
77
+ dead.add(m);
78
+ throw err;
79
+ }
80
+ };
66
81
  return modelOf({
67
82
  id: first.id,
68
83
  provider: first.provider,
69
84
  takes: first.takes,
70
- complete: (req) => overRing(models, (m) => m.complete(req), next, o),
85
+ complete: (req) => {
86
+ const live = models.filter((m) => !dead.has(m));
87
+ return overRing(live.length ? live : models, call(req), next, o);
88
+ },
89
+ });
90
+ }
91
+ /**
92
+ * Models in order of preference (`gemini-3.8-flash`, then `gemini-3.5-flash`): each call starts at
93
+ * the first and moves down past a busy or refused one. The reply's `model` names who answered.
94
+ */
95
+ export function fallback(models, o = {}) {
96
+ const first = models[0];
97
+ if (!first)
98
+ throw new Error("fallback needs at least one model");
99
+ const takes = new Set(models.flatMap((m) => [...m.takes]).filter((k) => models.every((m) => m.takes.has(k))));
100
+ return modelOf({
101
+ id: first.id,
102
+ provider: first.provider,
103
+ takes,
104
+ complete: (req) => {
105
+ const next = cursor();
106
+ return overRing(models, (m) => m.complete(req), next, o);
107
+ },
71
108
  });
72
109
  }
73
110
  //# sourceMappingURL=keys.js.map
package/dist/keys.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAKrC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,MAAc;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAaD,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAExE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAkB,EAClB,IAA0B,EAC1B,KAAmB,EACnB,IAAmB,EAAE;IAErB,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IACzE,IAAI,IAAa,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,IAAI,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACzE,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAM,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;oBAAE,MAAM,GAAG,CAAC;gBACpD,IAAI,WAAW,CAAC,GAAG,CAAC;oBAAE,IAAI,GAAG,IAAI,CAAC;gBAClC,IAAI,GAAG,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,MAAM;IACnB,CAAC;IACD,MAAM,IAAI,CAAC;AACb,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;AACnB,CAAC,CAAC;AAEF,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,MAAwB,EAAE,IAAmB,EAAE;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;IACtB,OAAO,OAAO,CAAC;QACb,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KACrE,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
package/dist/prices.js CHANGED
@@ -47,6 +47,13 @@ export const MODEL_PRICES = [
47
47
  vendor: "groq",
48
48
  tiers: [{ upTo: null, rate: { input: 0.15, output: 0.6, cacheRead: 0.075 } }],
49
49
  },
50
+ {
51
+ // Introductory to 2026-12-31; from 2027-01-01 $1.50 in, $7.50 out.
52
+ model: "gemini-3.8-flash",
53
+ name: "Gemini 3.8 Flash",
54
+ vendor: "google",
55
+ tiers: [{ upTo: null, rate: { input: 0.75, output: 3.75 } }],
56
+ },
50
57
  {
51
58
  model: "gemini-3.5-flash",
52
59
  name: "Gemini 3.5 Flash",
@@ -1 +1 @@
1
- {"version":3,"file":"prices.js","sourceRoot":"","sources":["../src/prices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prices.js","sourceRoot":"","sources":["../src/prices.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type RotateOptions } from "./keys.js";
2
- import type { Model } from "./types.js";
2
+ import type { Clip, Model, Part } from "./types.js";
3
3
  /** Short names for the current Claude models. A full id passes through. */
4
4
  export declare const ANTHROPIC_MODELS: Readonly<Record<string, string>>;
5
5
  export declare const anthropicModelId: (name: string) => string;
@@ -9,13 +9,52 @@ export interface VendorOptions {
9
9
  model?: string;
10
10
  rotate?: RotateOptions;
11
11
  limitMs?: number;
12
- /** For tests: the wire. */
12
+ /** The wire: a test's, or a proxy's (wren's gateway holds Gemini keys behind one). */
13
13
  fetch?: typeof fetch;
14
14
  }
15
15
  /** Claude on Wren's own key. Default Haiku 5.5. */
16
16
  export declare function anthropic(o: VendorOptions): Model;
17
- /** Gemini on the free key ring. It takes every part kind, YouTube URLs as video included. */
17
+ /**
18
+ * Gemini on the free key ring. It takes every part kind, YouTube URLs as video included. A video
19
+ * part with a `clip` goes to generateContent with `videoMetadata` (`withClips`). Gemini's
20
+ * Interactions API also reads a stretch, but on free keys its flash quota is spent at once.
21
+ */
18
22
  export declare function gemini(o: VendorOptions): Model;
23
+ /**
24
+ * A fetch that adds Gemini's `videoMetadata` to each video part of a generateContent body: one
25
+ * clip per video part, in prompt order (`undefined` leaves that part whole). The SDK builds the
26
+ * rest of the body and reads the reply.
27
+ */
28
+ export declare function withClips(clips: readonly (Clip | undefined)[], go: typeof fetch): typeof fetch;
29
+ /** A file in Gemini's Files API: read it with a Gemini model on `key` alone. */
30
+ export interface GeminiFile {
31
+ /** The file lives in this key's project; another key cannot read it. */
32
+ key: string;
33
+ /** `files/<id>`. */
34
+ name: string;
35
+ part: Part;
36
+ /** Deletes it now. The API also deletes it after 48 hours. */
37
+ drop(): Promise<void>;
38
+ }
39
+ /**
40
+ * Uploads bytes too large to send inline (a long video) to Gemini's Files API, through the SDK's
41
+ * uploader, and waits until the file can be read. It tries each key in turn: a key that refuses
42
+ * passes to the next.
43
+ */
44
+ export declare function geminiFile(data: Uint8Array, o: {
45
+ key: string | readonly string[];
46
+ mediaType: string;
47
+ displayName?: string;
48
+ pollMs?: number;
49
+ fetch?: typeof fetch;
50
+ }): Promise<GeminiFile>;
51
+ /**
52
+ * The Gemini keys the API still takes. A suspended key answers 403 and the ring passes it at once,
53
+ * but only after the call is sent: check first before a large inline body goes to each.
54
+ */
55
+ export declare function geminiLiveKeys(keys: readonly string[], o?: {
56
+ fetch?: typeof fetch;
57
+ }): Promise<string[]>;
19
58
  /** Cohere's own API on the free key ring: text and images. */
20
59
  export declare function cohere(o: VendorOptions): Model;
21
60
  /** OpenAI-compatible vendors: base URL, default model, and whether Wren's keys there are free. */
package/dist/providers.js CHANGED
@@ -30,29 +30,136 @@ export function anthropic(o) {
30
30
  const modelId = anthropicModelId(o.model ?? "haiku");
31
31
  return ring(keyList(o.key), (apiKey) => sdkModel({
32
32
  provider: "anthropic",
33
+ secret: apiKey,
33
34
  modelId,
34
35
  model: createAnthropic({ apiKey, ...wire(o) })(modelId),
35
36
  takes: kinds("text", "image", "pdf"),
36
37
  ...(o.limitMs ? { limitMs: o.limitMs } : {}),
37
38
  }), o.rotate, "anthropic");
38
39
  }
39
- /** Gemini on the free key ring. It takes every part kind, YouTube URLs as video included. */
40
+ /**
41
+ * Gemini on the free key ring. It takes every part kind, YouTube URLs as video included. A video
42
+ * part with a `clip` goes to generateContent with `videoMetadata` (`withClips`). Gemini's
43
+ * Interactions API also reads a stretch, but on free keys its flash quota is spent at once.
44
+ */
40
45
  export function gemini(o) {
41
46
  const modelId = o.model ?? "gemini-3.5-flash";
42
47
  return ring(keyList(o.key), (apiKey) => sdkModel({
43
48
  provider: "google",
49
+ secret: apiKey,
44
50
  modelId,
45
51
  model: createGoogle({ apiKey, ...wire(o) })(modelId),
52
+ clipModel: (clips) => createGoogle({ apiKey, fetch: withClips(clips, o.fetch ?? fetch) })(modelId),
46
53
  takes: kinds("text", "image", "video", "audio", "pdf"),
47
54
  free: true,
48
55
  ...(o.limitMs ? { limitMs: o.limitMs } : {}),
49
56
  }), o.rotate, "gemini");
50
57
  }
58
+ /**
59
+ * A fetch that adds Gemini's `videoMetadata` to each video part of a generateContent body: one
60
+ * clip per video part, in prompt order (`undefined` leaves that part whole). The SDK builds the
61
+ * rest of the body and reads the reply.
62
+ */
63
+ export function withClips(clips, go) {
64
+ return (url, init) => {
65
+ if (typeof init?.body !== "string")
66
+ return go(url, init);
67
+ const body = JSON.parse(init.body);
68
+ let n = 0;
69
+ for (const content of body.contents ?? [])
70
+ for (const part of content.parts ?? []) {
71
+ const file = (part.fileData ?? part.inlineData);
72
+ if (!file?.mimeType?.startsWith("video/"))
73
+ continue;
74
+ const clip = clips[n++];
75
+ if (clip)
76
+ part.videoMetadata = {
77
+ startOffset: `${clip.startS}s`,
78
+ endOffset: `${clip.endS}s`,
79
+ ...(clip.fps ? { fps: clip.fps } : {}),
80
+ };
81
+ }
82
+ return go(url, { ...init, body: JSON.stringify(body) });
83
+ };
84
+ }
85
+ const GEMINI_API = "https://generativelanguage.googleapis.com/v1beta";
86
+ function filePart(uri, mediaType) {
87
+ const data = new URL(uri);
88
+ if (mediaType === "application/pdf")
89
+ return { type: "pdf", data };
90
+ const kind = mediaType.split("/")[0];
91
+ if (kind === "video" || kind === "audio" || kind === "image")
92
+ return { type: kind, data, mediaType };
93
+ throw new Error(`gemini file: no part kind for ${mediaType}`);
94
+ }
95
+ /**
96
+ * Uploads bytes too large to send inline (a long video) to Gemini's Files API, through the SDK's
97
+ * uploader, and waits until the file can be read. It tries each key in turn: a key that refuses
98
+ * passes to the next.
99
+ */
100
+ export async function geminiFile(data, o) {
101
+ const keys = keyList(o.key);
102
+ if (!keys.length)
103
+ throw new Error("gemini file needs at least one key");
104
+ let last = "";
105
+ for (const key of keys) {
106
+ try {
107
+ const up = await createGoogle({ apiKey: key, ...wire(o) })
108
+ .files()
109
+ .uploadFile({
110
+ data: { type: "data", data },
111
+ mediaType: o.mediaType,
112
+ providerOptions: {
113
+ google: {
114
+ ...(o.displayName ? { displayName: o.displayName } : {}),
115
+ ...(o.pollMs ? { pollIntervalMs: o.pollMs } : {}),
116
+ },
117
+ },
118
+ });
119
+ const uri = up.providerReference.google;
120
+ const name = String(up.providerMetadata?.google?.name ?? "");
121
+ if (!uri || !name)
122
+ throw new Error("no file uri in the reply");
123
+ const go = o.fetch ?? fetch;
124
+ return {
125
+ key,
126
+ name,
127
+ part: filePart(uri, o.mediaType),
128
+ drop: async () => {
129
+ await go(`${GEMINI_API}/${name}`, {
130
+ method: "DELETE",
131
+ headers: { "x-goog-api-key": key },
132
+ }).catch(() => { });
133
+ },
134
+ };
135
+ }
136
+ catch (err) {
137
+ last = (err instanceof Error ? err.message : String(err))
138
+ .replaceAll(key, "<key>")
139
+ .slice(0, 200);
140
+ }
141
+ }
142
+ throw new Error(`gemini file: every key refused, last ${last}`);
143
+ }
144
+ const GEMINI_MODELS = "https://generativelanguage.googleapis.com/v1beta/models?pageSize=1";
145
+ /**
146
+ * The Gemini keys the API still takes. A suspended key answers 403 and the ring passes it at once,
147
+ * but only after the call is sent: check first before a large inline body goes to each.
148
+ */
149
+ export async function geminiLiveKeys(keys, o = {}) {
150
+ const fetchFn = o.fetch ?? fetch;
151
+ const ok = await Promise.all(keys.map((key) => fetchFn(GEMINI_MODELS, {
152
+ headers: { "x-goog-api-key": key },
153
+ signal: AbortSignal.timeout(15_000),
154
+ }).then((r) => r.ok, () => false)));
155
+ return keys.filter((_, i) => ok[i]);
156
+ }
51
157
  /** Cohere's own API on the free key ring: text and images. */
52
158
  export function cohere(o) {
53
159
  const modelId = o.model ?? "command-a-03-2025";
54
160
  return ring(keyList(o.key), (apiKey) => sdkModel({
55
161
  provider: "cohere",
162
+ secret: apiKey,
56
163
  modelId,
57
164
  model: createCohere({ apiKey, ...wire(o) })(modelId),
58
165
  takes: modelId.includes("vision") ? kinds("text", "image") : TEXT_ONLY,
@@ -86,6 +193,7 @@ export function compatible(vendor, o) {
86
193
  const modelId = o.model ?? spec.model;
87
194
  return ring(keyList(o.key), (apiKey) => sdkModel({
88
195
  provider: vendor,
196
+ secret: apiKey,
89
197
  modelId,
90
198
  model: createOpenAICompatible({ name: vendor, baseURL: spec.baseURL, apiKey, ...wire(o) })(modelId),
91
199
  takes: TEXT_ONLY,
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
package/dist/sdk.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * caller (a runner, a key ring) owns trying again.
5
5
  */
6
6
  import { type LanguageModel } from "ai";
7
- import type { Model, PartKind } from "./types.js";
7
+ import type { Clip, Model, PartKind } from "./types.js";
8
8
  /** The ceiling when a request names none. A long extract with quotes passed 4096 on a live run. */
9
9
  export declare const DEFAULT_MAX_TOKENS = 8192;
10
10
  /** One call, wall clock: a long draft takes a minute or two. */
@@ -15,6 +15,11 @@ export interface SdkModelOptions {
15
15
  /** The vendor's model id. */
16
16
  modelId: string;
17
17
  model: LanguageModel;
18
+ /**
19
+ * The model for a request with a clipped video, given each video part's clip in prompt order.
20
+ * Gemini's: generateContent with `videoMetadata`, a field the SDK does not send (`withClips`).
21
+ */
22
+ clipModel?: (clips: readonly (Clip | undefined)[]) => LanguageModel;
18
23
  takes: ReadonlySet<PartKind>;
19
24
  /** Tokens added to every ceiling for a model that thinks inside its output budget. */
20
25
  thinking?: number;
@@ -23,5 +28,7 @@ export interface SdkModelOptions {
23
28
  /** The id the price table knows, when it is not `modelId`. */
24
29
  priceId?: string;
25
30
  limitMs?: number;
31
+ /** The call's key, put out of every error message. */
32
+ secret?: string;
26
33
  }
27
34
  export declare function sdkModel(o: SdkModelOptions): Model;
package/dist/sdk.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * caller (a runner, a key ring) owns trying again.
5
5
  */
6
6
  import { APICallError, generateText, } from "ai";
7
- import { Cut, statusError, Transient, transport } from "./errors.js";
7
+ import { Cut, Filtered, redact, statusError, Transient, transport } from "./errors.js";
8
8
  import { modelOf } from "./model.js";
9
9
  import { wellFormed } from "./parse.js";
10
10
  import { priced } from "./prices.js";
@@ -21,16 +21,30 @@ const GEMINI_LEVEL = {
21
21
  xhigh: "high",
22
22
  max: "high",
23
23
  };
24
- function effortOptions(provider, effort) {
25
- if (!effort)
26
- return {};
24
+ const GEMINI_RESOLUTION = {
25
+ low: "MEDIA_RESOLUTION_LOW",
26
+ medium: "MEDIA_RESOLUTION_MEDIUM",
27
+ high: "MEDIA_RESOLUTION_HIGH",
28
+ };
29
+ /** Effort and resolution as the vendor's options. */
30
+ function vendorOptions(provider, req) {
27
31
  if (provider === "anthropic")
28
- return { providerOptions: { anthropic: { effort } } };
29
- if (provider === "google")
30
- return {
31
- providerOptions: { google: { thinkingConfig: { thinkingLevel: GEMINI_LEVEL[effort] } } },
32
- };
33
- return {};
32
+ return req.effort ? { providerOptions: { anthropic: { effort: req.effort } } } : {};
33
+ if (provider !== "google")
34
+ return {};
35
+ const level = req.effort ? GEMINI_LEVEL[req.effort] : undefined;
36
+ const google = {
37
+ ...(level ? { thinkingConfig: { thinkingLevel: level } } : {}),
38
+ ...(req.resolution ? { mediaResolution: GEMINI_RESOLUTION[req.resolution] } : {}),
39
+ };
40
+ return Object.keys(google).length ? { providerOptions: { google } } : {};
41
+ }
42
+ /** Each video part's clip, in prompt order; null when no part has one. */
43
+ function clipsOf(req) {
44
+ if (typeof req.prompt === "string")
45
+ return null;
46
+ const clips = req.prompt.flatMap((p) => (p.type === "video" ? [p.clip] : []));
47
+ return clips.some(Boolean) ? clips : null;
34
48
  }
35
49
  function contentOf(parts) {
36
50
  return parts.map((p) => {
@@ -38,7 +52,7 @@ function contentOf(parts) {
38
52
  case "text":
39
53
  return { type: "text", text: wellFormed(p.text) };
40
54
  case "image":
41
- return { type: "image", image: p.data, mediaType: p.mediaType };
55
+ return { type: "file", data: p.data, mediaType: p.mediaType };
42
56
  case "pdf":
43
57
  return { type: "file", data: p.data, mediaType: "application/pdf" };
44
58
  default:
@@ -64,13 +78,13 @@ function input(provider, req) {
64
78
  ...body,
65
79
  };
66
80
  }
67
- function failure(what, err, signal) {
81
+ function failure(what, err, signal, secrets) {
68
82
  if (signal?.aborted)
69
83
  return err;
70
84
  if (APICallError.isInstance(err)) {
71
85
  if (err.statusCode === undefined)
72
86
  return transport(what, err);
73
- const detail = err.message.slice(0, 300);
87
+ const detail = redact(err.message, secrets).slice(0, 300);
74
88
  return statusError(`${what}: HTTP ${err.statusCode} ${detail}`, err.statusCode, err.responseHeaders?.["retry-after"]);
75
89
  }
76
90
  if (err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError"))
@@ -90,19 +104,20 @@ export function sdkModel(o) {
90
104
  const started = performance.now();
91
105
  const timeout = AbortSignal.timeout(limitMs);
92
106
  const abortSignal = req.signal ? AbortSignal.any([req.signal, timeout]) : timeout;
107
+ const clips = o.clipModel ? clipsOf(req) : null;
93
108
  let result;
94
109
  try {
95
110
  result = await generateText({
96
- model: o.model,
111
+ model: clips && o.clipModel ? o.clipModel(clips) : o.model,
97
112
  ...input(o.provider, req),
98
113
  maxOutputTokens: Math.max(req.maxTokens ?? DEFAULT_MAX_TOKENS, FLOOR_TOKENS) + (o.thinking ?? 0),
99
- ...effortOptions(o.provider, req.effort),
114
+ ...vendorOptions(o.provider, req),
100
115
  maxRetries: 0,
101
116
  abortSignal,
102
117
  });
103
118
  }
104
119
  catch (err) {
105
- throw failure(id, err, req.signal);
120
+ throw failure(id, err, req.signal, o.secret ? [o.secret] : []);
106
121
  }
107
122
  const u = result.usage;
108
123
  const tokens = {};
@@ -118,6 +133,8 @@ export function sdkModel(o) {
118
133
  const stop = result.rawFinishReason ?? result.finishReason;
119
134
  if (result.finishReason === "length")
120
135
  throw new Cut(`${id} stopped at its output cap (${stop})`, result.text, usage);
136
+ if (result.finishReason === "content-filter")
137
+ throw new Filtered(`${id} stopped the answer itself (${stop})`, String(stop), result.text, usage);
121
138
  if (!result.text)
122
139
  throw new Error(`${id}: no text in the reply (stop ${stop})`);
123
140
  return {
package/dist/sdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -6,6 +6,12 @@
6
6
  import type { ZodType } from "zod";
7
7
  /** What a part holds: bytes (base64 or raw) or a URL the vendor fetches itself. */
8
8
  export type Source = Uint8Array | string | URL;
9
+ /** A stretch of a video, in seconds from its start; `fps` samples frames (Gemini's default is 1). */
10
+ export interface Clip {
11
+ startS: number;
12
+ endS: number;
13
+ fps?: number;
14
+ }
9
15
  export type Part = {
10
16
  type: "text";
11
17
  text: string;
@@ -17,6 +23,7 @@ export type Part = {
17
23
  type: "video";
18
24
  data: Source;
19
25
  mediaType: string;
26
+ clip?: Clip;
20
27
  } | {
21
28
  type: "audio";
22
29
  data: Source;
@@ -35,6 +42,8 @@ export interface Request {
35
42
  /** A ceiling against a runaway answer, never the length: the prompt says how long. */
36
43
  maxTokens?: number;
37
44
  effort?: Effort;
45
+ /** How finely images and video are sampled. Gemini reads it (low is a quarter of the tokens); others ignore it. */
46
+ resolution?: "low" | "medium" | "high";
38
47
  /** What the call is for (`triage`, `drafts`). No vendor sees it; meters group by it. */
39
48
  purpose?: string;
40
49
  signal?: AbortSignal;
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@wrenautomation/models",
3
- "version": "0.1.0",
3
+ "version": "0.7.1",
4
4
  "description": "One door to every model: a Model takes text, image, video, audio and PDF parts, answers with text, tokens and USD, and parses an answer to a zod shape. Adapters for Anthropic, Gemini, Cohere, any OpenAI-compatible server and a shell command (claude -p); ears for speech to text; one price table; one key ring.",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/wrenautomation/models.git"
7
+ "url": "git+https://github.com/wrenautomation/engine.git",
8
+ "directory": "packages/models"
8
9
  },
9
10
  "license": "PolyForm-Shield-1.0.0",
10
11
  "files": [
@@ -39,20 +40,9 @@
39
40
  "import": "./dist/spec.js"
40
41
  }
41
42
  },
42
- "packageManager": "pnpm@9.15.0",
43
43
  "engines": {
44
44
  "node": ">=24"
45
45
  },
46
- "scripts": {
47
- "prepare": "git config core.hooksPath .githooks || true",
48
- "lint": "biome check --error-on-warnings .",
49
- "lint:fix": "biome check --write .",
50
- "typecheck": "tsc --noEmit",
51
- "build": "rm -rf dist && tsc",
52
- "test": "vitest run",
53
- "gates": "lockf -t 900 /tmp/wren_automation-checks.lock sh -c 'pnpm lint && pnpm typecheck && pnpm test'",
54
- "prepublishOnly": "pnpm build"
55
- },
56
46
  "dependencies": {
57
47
  "@ai-sdk/anthropic": "4.0.90",
58
48
  "@ai-sdk/cohere": "4.0.71",
@@ -61,10 +51,8 @@
61
51
  "ai": "7.0.155",
62
52
  "zod": "4.6.5"
63
53
  },
64
- "devDependencies": {
65
- "@biomejs/biome": "2.5.14",
66
- "@types/node": "22.20.3",
67
- "typescript": "5.9.3",
68
- "vitest": "5.0.1"
54
+ "scripts": {
55
+ "typecheck": "tsc --noEmit",
56
+ "build": "rm -rf dist && tsc"
69
57
  }
70
- }
58
+ }