@chai-ui/core 0.8.0 → 0.10.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.
Files changed (49) hide show
  1. package/README.md +6 -5
  2. package/dist/composer-view.d.ts +6 -0
  3. package/dist/composer-view.d.ts.map +1 -1
  4. package/dist/composer-view.js +6 -0
  5. package/dist/composer-view.js.map +1 -1
  6. package/dist/composer.d.ts +1 -1
  7. package/dist/composer.d.ts.map +1 -1
  8. package/dist/composer.js +7 -3
  9. package/dist/composer.js.map +1 -1
  10. package/dist/engine.d.ts +1 -1
  11. package/dist/engine.js +1 -1
  12. package/dist/engines/fal.d.ts +25 -0
  13. package/dist/engines/fal.d.ts.map +1 -1
  14. package/dist/engines/fal.js +41 -0
  15. package/dist/engines/fal.js.map +1 -1
  16. package/dist/engines/openrouter.d.ts +9 -2
  17. package/dist/engines/openrouter.d.ts.map +1 -1
  18. package/dist/engines/openrouter.js +2 -2
  19. package/dist/engines/openrouter.js.map +1 -1
  20. package/dist/engines/vercel.d.ts +64 -0
  21. package/dist/engines/vercel.d.ts.map +1 -0
  22. package/dist/engines/vercel.js +137 -0
  23. package/dist/engines/vercel.js.map +1 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/server/chai-handler.d.ts +7 -2
  29. package/dist/server/chai-handler.d.ts.map +1 -1
  30. package/dist/server/chai-handler.js +31 -3
  31. package/dist/server/chai-handler.js.map +1 -1
  32. package/dist/suggested-models.d.ts.map +1 -1
  33. package/dist/suggested-models.js +2 -1
  34. package/dist/suggested-models.js.map +1 -1
  35. package/dist/voice-input.d.ts +79 -0
  36. package/dist/voice-input.d.ts.map +1 -0
  37. package/dist/voice-input.js +207 -0
  38. package/dist/voice-input.js.map +1 -0
  39. package/package.json +4 -3
  40. package/src/composer-view.ts +6 -0
  41. package/src/composer.ts +7 -3
  42. package/src/engine.ts +1 -1
  43. package/src/engines/fal.ts +55 -0
  44. package/src/engines/openrouter.ts +3 -3
  45. package/src/engines/vercel.ts +198 -0
  46. package/src/index.ts +2 -0
  47. package/src/server/chai-handler.ts +37 -5
  48. package/src/suggested-models.ts +2 -1
  49. package/src/voice-input.ts +257 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * A `GenerationEngine` backed by Vercel's AI Gateway (vercel.com/docs/ai-gateway)
3
+ * — one OpenAI-compatible endpoint in front of 200+ models from many labs.
4
+ * Covers text/reasoning (chat completions, the same wire format as
5
+ * OpenRouter) and image generation (the OpenAI-style images endpoint).
6
+ *
7
+ * Video isn't offered: the gateway's OpenAI-compatible surface has no
8
+ * confirmed video-generation endpoint, so `outputKind: "video"` doesn't
9
+ * exist here. Use `createFalEngine` for video.
10
+ *
11
+ * Security: this engine never sees an API key and never calls
12
+ * `ai-gateway.vercel.sh` directly. It POSTs to a same-origin `endpoint`
13
+ * (default `/api/chai/vercel`, served by `createChaiHandler`), which adds
14
+ * `AI_GATEWAY_API_KEY` (or `VERCEL_OIDC_TOKEN` on Vercel) server-side.
15
+ * Passing a key into this file would put it in the browser bundle; don't
16
+ * add one.
17
+ */
18
+ import { readEvaluations } from "../engine.js";
19
+ import { buildChatRequest, describeError, readChatStream, toUsage, } from "./openrouter.js";
20
+ export function createVercelEngine(options = {}) {
21
+ const endpoint = (options.endpoint ?? "/api/chai/vercel").replace(/\/$/, "");
22
+ const fetchImpl = options.fetchImpl ?? fetch;
23
+ const outputKind = options.outputKind ?? "text";
24
+ return {
25
+ async generate({ modelId, prompt, attachments, onText, signal }) {
26
+ const model = modelId ?? options.modelByKind?.[outputKind] ?? options.model;
27
+ if (!model) {
28
+ throw new Error(`vercelEngine: no model configured for outputKind "${outputKind}" — pass \`model\` or \`modelByKind.${outputKind}\`.`);
29
+ }
30
+ if (outputKind === "image") {
31
+ if (attachments.length > 0) {
32
+ throw new Error("vercelEngine: image generation takes a prompt only; attachments aren't supported here.");
33
+ }
34
+ return generateImage({ endpoint, fetchImpl, model, prompt, signal });
35
+ }
36
+ return generateText({
37
+ endpoint,
38
+ fetchImpl,
39
+ model,
40
+ prompt,
41
+ attachments,
42
+ onText,
43
+ signal,
44
+ maxTokens: options.maxTokens,
45
+ pricePerMillionTokens: options.pricePerMillionTokens,
46
+ });
47
+ },
48
+ };
49
+ }
50
+ async function generateText(args) {
51
+ const body = buildChatRequest({
52
+ model: args.model,
53
+ prompt: args.prompt,
54
+ media: args.attachments,
55
+ maxTokens: args.maxTokens,
56
+ });
57
+ const res = await args.fetchImpl(`${args.endpoint}/chat`, {
58
+ method: "POST",
59
+ headers: { "Content-Type": "application/json" },
60
+ body: JSON.stringify(args.onText ? { ...body, stream: true } : body),
61
+ signal: args.signal,
62
+ });
63
+ // A rejected request comes back as plain JSON even when streaming was asked for.
64
+ if (args.onText && res.ok) {
65
+ const { text, usage, evaluations } = await readChatStream(res, args.onText);
66
+ if (!text)
67
+ throw new Error("vercelEngine: empty response from the AI Gateway");
68
+ return { src: text, kind: "text", usage: toUsage(usage, args.pricePerMillionTokens), evaluations };
69
+ }
70
+ const json = (await res.json().catch(() => ({})));
71
+ if (!res.ok || json.error) {
72
+ throw new Error(`vercelEngine: ${describeError(json, `${res.status} ${res.statusText}`)}`);
73
+ }
74
+ const text = json.choices?.[0]?.message?.content;
75
+ if (!text)
76
+ throw new Error("vercelEngine: empty response from the AI Gateway");
77
+ return {
78
+ src: text,
79
+ kind: "text",
80
+ usage: toUsage(json.usage, args.pricePerMillionTokens),
81
+ evaluations: readEvaluations(json),
82
+ };
83
+ }
84
+ /**
85
+ * Image generation through `/v1/images/generations`. The OpenAI images
86
+ * shape returns either a hosted `url` or inline `b64_json`; both come back
87
+ * as a usable `src`. The gateway's image endpoint takes no aspect-ratio
88
+ * field here, so the engine doesn't send one — size is the model's default.
89
+ */
90
+ async function generateImage(args) {
91
+ const res = await args.fetchImpl(`${args.endpoint}/images`, {
92
+ method: "POST",
93
+ headers: { "Content-Type": "application/json" },
94
+ body: JSON.stringify({ model: args.model, prompt: args.prompt, n: 1 }),
95
+ signal: args.signal,
96
+ });
97
+ const json = (await res.json().catch(() => ({})));
98
+ if (!res.ok || json.error) {
99
+ throw new Error(`vercelEngine: ${describeError(json, `${res.status} ${res.statusText}`)}`);
100
+ }
101
+ const item = json.data?.[0];
102
+ const src = item?.url ?? (item?.b64_json ? `data:image/png;base64,${item.b64_json}` : undefined);
103
+ if (!src)
104
+ throw new Error("vercelEngine: no image in the AI Gateway's response");
105
+ return { src, kind: "image" };
106
+ }
107
+ /**
108
+ * A minimal, cheap connectivity check through the same-origin route — the
109
+ * "use real inference sparingly" path. Like `pingOpenRouter` and `pingFal`,
110
+ * it's triggered once by a person from the Develop page's "Test connection"
111
+ * button, never by a test or on mount. It needs a `model` because the
112
+ * gateway has no default.
113
+ */
114
+ export async function pingVercel(options) {
115
+ const endpoint = (options.endpoint ?? "/api/chai/vercel").replace(/\/$/, "");
116
+ const fetchImpl = options.fetchImpl ?? fetch;
117
+ try {
118
+ const res = await fetchImpl(`${endpoint}/chat`, {
119
+ method: "POST",
120
+ headers: { "Content-Type": "application/json" },
121
+ body: JSON.stringify({
122
+ model: options.model,
123
+ messages: [{ role: "user", content: "Reply with exactly one word: OK." }],
124
+ max_tokens: 5,
125
+ }),
126
+ });
127
+ const json = (await res.json().catch(() => ({})));
128
+ if (!res.ok || json.error) {
129
+ return { ok: false, error: describeError(json, `${res.status} ${res.statusText}`) };
130
+ }
131
+ return { ok: true, reply: json.choices?.[0]?.message?.content?.trim() ?? "" };
132
+ }
133
+ catch (err) {
134
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
135
+ }
136
+ }
137
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../src/engines/vercel.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from "./run.js";
4
4
  export * from "./media-analysis-prompts.js";
5
5
  export * from "./engines/openrouter.js";
6
6
  export * from "./engines/fal.js";
7
+ export * from "./engines/vercel.js";
7
8
  export * from "./model-routing.js";
8
9
  export * from "./region-edit.js";
9
10
  export * from "./suggested-models.js";
@@ -15,4 +16,5 @@ export * from "./media-actions.js";
15
16
  export * from "./result-format.js";
16
17
  export * from "./composer-view.js";
17
18
  export * from "./edit-card.js";
19
+ export * from "./voice-input.js";
18
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export * from "./run.js";
4
4
  export * from "./media-analysis-prompts.js";
5
5
  export * from "./engines/openrouter.js";
6
6
  export * from "./engines/fal.js";
7
+ export * from "./engines/vercel.js";
7
8
  export * from "./model-routing.js";
8
9
  export * from "./region-edit.js";
9
10
  export * from "./suggested-models.js";
@@ -15,4 +16,5 @@ export * from "./media-actions.js";
15
16
  export * from "./result-format.js";
16
17
  export * from "./composer-view.js";
17
18
  export * from "./edit-card.js";
19
+ export * from "./voice-input.js";
18
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
@@ -8,12 +8,17 @@
8
8
  * runs in Next.js, React Router (Remix), Hono, Cloudflare Workers, Bun and
9
9
  * Deno. `toNodeHandler` (./node.ts) adapts it for Express and plain Node.
10
10
  */
11
- export type ChaiProviderId = "fal" | "openrouter";
11
+ export type ChaiProviderId = "fal" | "openrouter" | "vercel";
12
12
  export interface ChaiHandlerOptions {
13
13
  /** Defaults to the `FAL_KEY` environment variable. */
14
14
  falKey?: string;
15
15
  /** Defaults to the `OPENROUTER_API_KEY` environment variable. */
16
16
  openRouterKey?: string;
17
+ /**
18
+ * Vercel AI Gateway key. Defaults to `AI_GATEWAY_API_KEY`, then to
19
+ * `VERCEL_OIDC_TOKEN`, which Vercel sets automatically on deployed apps.
20
+ */
21
+ aiGatewayKey?: string;
17
22
  /**
18
23
  * Who may use this route. Return false to reject with 403. Without it,
19
24
  * anyone who can reach your site can spend your API credit: check your
@@ -21,7 +26,7 @@ export interface ChaiHandlerOptions {
21
26
  */
22
27
  authorize?: (request: Request) => boolean | Promise<boolean>;
23
28
  /**
24
- * The only model ids this route will run, across both providers (e.g.
29
+ * The only model ids this route will run, across all providers (e.g.
25
30
  * `"fal-ai/flux/schnell"`, `"anthropic/claude-opus-5"`). Anything else is
26
31
  * rejected with 403, so nobody can run an expensive model through you.
27
32
  * Omit to allow every model.
@@ -1 +1 @@
1
- {"version":3,"file":"chai-handler.d.ts","sourceRoot":"","sources":["../../src/server/chai-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,oFAAoF;IACpF,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,yBAAyB;IACzB,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAmD/E"}
1
+ {"version":3,"file":"chai-handler.d.ts","sourceRoot":"","sources":["../../src/server/chai-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAQ7D,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,oFAAoF;IACpF,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,yBAAyB;IACzB,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAuE/E"}
@@ -10,6 +10,12 @@
10
10
  */
11
11
  const FAL_QUEUE_BASE = "https://queue.fal.run";
12
12
  const OPENROUTER_CHAT_URL = "https://openrouter.ai/api/v1/chat/completions";
13
+ const VERCEL_GATEWAY_BASE = "https://ai-gateway.vercel.sh/v1";
14
+ const PROVIDER_LABEL = {
15
+ fal: "Fal.ai",
16
+ openrouter: "OpenRouter",
17
+ vercel: "Vercel AI Gateway",
18
+ };
13
19
  export function createChaiHandler(options = {}) {
14
20
  const fetchImpl = options.fetch ?? fetch;
15
21
  async function handle(request) {
@@ -40,6 +46,28 @@ export function createChaiHandler(options = {}) {
40
46
  body,
41
47
  });
42
48
  }
49
+ // Vercel AI Gateway is OpenAI-compatible: /chat for text, /images for image generation.
50
+ if (route.provider === "vercel") {
51
+ const upstream = route.rest === "chat" ? "chat/completions" : route.rest === "images" ? "images/generations" : null;
52
+ if (!upstream)
53
+ return fail(404, `Unknown Vercel AI Gateway path "${route.rest}".`);
54
+ if (request.method !== "POST")
55
+ return fail(405, "Use POST.");
56
+ const key = options.aiGatewayKey ?? readEnv("AI_GATEWAY_API_KEY") ?? readEnv("VERCEL_OIDC_TOKEN");
57
+ if (!key)
58
+ return fail(500, "AI_GATEWAY_API_KEY isn't set on the server.");
59
+ const body = await request.text();
60
+ const model = readModel(body);
61
+ if (options.allowedModels && !(model && options.allowedModels.includes(model))) {
62
+ return fail(403, `Model "${model ?? "(none)"}" isn't allowed on this server.`);
63
+ }
64
+ return forward(fetchImpl, route.provider, `${VERCEL_GATEWAY_BASE}/${upstream}`, {
65
+ signal: request.signal,
66
+ method: "POST",
67
+ headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" },
68
+ body,
69
+ });
70
+ }
43
71
  // Fal's queue API: POST /<model> submits, GET /<model>/requests/<id>[/status]
44
72
  // polls, PUT /<model>/requests/<id>/cancel cancels.
45
73
  const isCancel = request.method === "PUT" && route.rest.endsWith("/cancel");
@@ -63,7 +91,7 @@ export function createChaiHandler(options = {}) {
63
91
  /** Finds the provider segment anywhere in the path, so the route can be mounted at any prefix. */
64
92
  function parseRoute(pathname) {
65
93
  const parts = pathname.split("/").filter(Boolean);
66
- const i = parts.findIndex((p) => p === "fal" || p === "openrouter");
94
+ const i = parts.findIndex((p) => p === "fal" || p === "openrouter" || p === "vercel");
67
95
  if (i === -1 || i === parts.length - 1)
68
96
  return null;
69
97
  return { provider: parts[i], rest: parts.slice(i + 1).join("/") };
@@ -78,10 +106,10 @@ async function forward(fetchImpl, provider, url, init) {
78
106
  });
79
107
  }
80
108
  catch (err) {
81
- return errorResponse(provider, 502, `Couldn't reach ${provider === "fal" ? "Fal.ai" : "OpenRouter"}: ${err instanceof Error ? err.message : String(err)}`);
109
+ return errorResponse(provider, 502, `Couldn't reach ${PROVIDER_LABEL[provider]}: ${err instanceof Error ? err.message : String(err)}`);
82
110
  }
83
111
  }
84
- /** Errors in the shape each engine already reads: Fal's `{ error }`, OpenRouter's `{ error: { message } }`. */
112
+ /** Errors in the shape each engine already reads: Fal's `{ error }`, OpenRouter's and Vercel's `{ error: { message } }`. */
85
113
  function errorResponse(provider, status, message) {
86
114
  const body = provider === "fal" ? { error: message } : { error: { message } };
87
115
  return Response.json(body, { status });
@@ -1 +1 @@
1
- {"version":3,"file":"chai-handler.js","sourceRoot":"","sources":["../../src/server/chai-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chai-handler.js","sourceRoot":"","sources":["../../src/server/chai-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"suggested-models.d.ts","sourceRoot":"","sources":["../src/suggested-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuB5E,mCAAmC;AACnC,eAAO,MAAM,sBAAsB,EAAE,WAAW,EAa/C,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,8BAA8B,EAAE,WAAW,EAKvD,CAAC;AAEF,uHAAuH;AACvH,eAAO,MAAM,+BAA+B,EAAE,WAAW,EAKxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,EAY9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAqB/E,CAAC;AAEF,2GAA2G;AAC3G,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,WAAW,EAAE,CAarF;AAED,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAEjE,CAAC"}
1
+ {"version":3,"file":"suggested-models.d.ts","sourceRoot":"","sources":["../src/suggested-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwB5E,mCAAmC;AACnC,eAAO,MAAM,sBAAsB,EAAE,WAAW,EAa/C,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,8BAA8B,EAAE,WAAW,EAKvD,CAAC;AAEF,uHAAuH;AACvH,eAAO,MAAM,+BAA+B,EAAE,WAAW,EAKxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,EAY9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAqB/E,CAAC;AAEF,2GAA2G;AAC3G,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,WAAW,EAAE,CAarF;AAED,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAEjE,CAAC"}
@@ -2,7 +2,8 @@ import { DEFAULT_MAX_REGIONS } from "./region-edit.js";
2
2
  /**
3
3
  * Suggested models, so builders don't have to write model lists. Composer
4
4
  * and MediaAnalyzer use them when no `models` is passed; passing `models`
5
- * still replaces them. The first model in each list is the default pick.
5
+ * still replaces them. Nothing is picked for the person: with a Model menu
6
+ * they pick or turn on auto-select; with no menu, the list's first runs.
6
7
  *
7
8
  * Generation runs on Fal (the default engine), analysis on OpenRouter (the
8
9
  * reasoning engine). Every entry was checked against the provider's own
@@ -1 +1 @@
1
- {"version":3,"file":"suggested-models.js","sourceRoot":"","sources":["../src/suggested-models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suggested-models.js","sourceRoot":"","sources":["../src/suggested-models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /** A recorded clip, as a data URL. */
2
+ export interface VoiceClip {
3
+ src: string;
4
+ kind: "audio";
5
+ /** What the browser recorded, e.g. `"audio/webm;codecs=opus"` (Chrome, Firefox) or `"audio/mp4"` (Safari). */
6
+ mimeType: string;
7
+ }
8
+ /** Turns a recorded clip into text. Reject with an `AbortError` when `signal` aborts. */
9
+ export type Transcribe = (audio: VoiceClip, options?: {
10
+ signal?: AbortSignal;
11
+ }) => Promise<string>;
12
+ /**
13
+ * Turns on the Composer's mic. Name a Fal speech-to-text model and Chai
14
+ * sends the clip through your existing `/api/chai/fal` route, or pass your
15
+ * own `transcribe` for any other provider. There's no default model: the
16
+ * mic shows only once you choose one.
17
+ */
18
+ export type VoiceInputConfig = ({
19
+ model: string;
20
+ transcribe?: never;
21
+ endpoint?: string;
22
+ } | {
23
+ transcribe: Transcribe;
24
+ model?: never;
25
+ endpoint?: never;
26
+ }) & {
27
+ /** Longest recording, in seconds. Recording stops and transcribes at this length. Defaults to 60. */
28
+ maxSeconds?: number;
29
+ };
30
+ export type VoiceInputStatus = "idle" | "recording" | "transcribing" | "error";
31
+ export interface VoiceInputState {
32
+ status: VoiceInputStatus;
33
+ /** How long the current recording has run. */
34
+ elapsedMs: number;
35
+ /** A short message for the person while `status` is "error". */
36
+ error: string | null;
37
+ /**
38
+ * The microphone's recent loudness while recording, oldest first, each
39
+ * 0–1: what a waveform draws, so the person sees they're being heard.
40
+ * Empty when not recording, or when the browser has no Web Audio.
41
+ */
42
+ levels: number[];
43
+ }
44
+ /** How many level readings a waveform shows. */
45
+ export declare const VOICE_LEVEL_COUNT = 48;
46
+ export declare const DEFAULT_VOICE_MAX_SECONDS = 60;
47
+ /** The `Transcribe` a config describes: its own, or a Fal transcriber for its model. */
48
+ export declare function voiceTranscriber(config: VoiceInputConfig): Transcribe;
49
+ /** "0:05", "1:00": how long a recording has run. */
50
+ export declare function formatVoiceElapsed(ms: number): string;
51
+ /** Why the microphone couldn't start, in words for the person. */
52
+ export declare function describeMicError(err: unknown): string;
53
+ interface VoiceInputDeps {
54
+ /** Defaults to the browser's `navigator.mediaDevices.getUserMedia`. */
55
+ getUserMedia?: (constraints: MediaStreamConstraints) => Promise<MediaStream>;
56
+ /** Defaults to the browser's `MediaRecorder`. */
57
+ MediaRecorder?: typeof MediaRecorder;
58
+ /** Defaults to the browser's `AudioContext`, for the waveform. Without one, recording still works. */
59
+ AudioContext?: typeof AudioContext;
60
+ }
61
+ /**
62
+ * The recorder behind the mic button. `start` asks for the microphone and
63
+ * records; `stop` ends the recording and transcribes it; `cancel` stops
64
+ * either without a transcript. `onTranscript` gets the text: it never
65
+ * submits, so the person can fix it first.
66
+ */
67
+ export declare function createVoiceInput(getConfig: () => VoiceInputConfig, onTranscript: (text: string) => void, deps?: VoiceInputDeps): {
68
+ getState: () => VoiceInputState;
69
+ subscribe(listener: () => void): () => boolean;
70
+ start: () => Promise<void>;
71
+ stop: () => void;
72
+ cancel: () => void;
73
+ dismiss: () => void;
74
+ /** Stops everything, for when the Composer goes away. */
75
+ dispose(): void;
76
+ };
77
+ export type VoiceInput = ReturnType<typeof createVoiceInput>;
78
+ export {};
79
+ //# sourceMappingURL=voice-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-input.d.ts","sourceRoot":"","sources":["../src/voice-input.ts"],"names":[],"mappings":"AAQA,sCAAsC;AACtC,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,8GAA8G;IAC9G,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yFAAyF;AACzF,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEnG;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC3B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAC9D,GAAG;IACF,qGAAqG;IACrG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;OAIG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAK5C,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAErE;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAarD;AAED,UAAU,cAAc;IACtB,uEAAuE;IACvE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,sBAAsB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7E,iDAAiD;IACjD,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,sGAAsG;IACtG,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,gBAAgB,EACjC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACpC,IAAI,GAAE,cAAmB;;wBA8HH,MAAM,IAAI;;;;;IAQ9B,yDAAyD;;EAQ5D;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}