@canarycoders/ai 0.6.0 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/compat.ts","../src/core/errors.ts","../src/core/fetch.ts","../src/core/retry.ts","../src/utils/sleep.ts","../src/core/http.ts","../src/core/poller.ts","../src/core/sse.ts","../src/core/stream-adapters.ts","../src/core/job.ts","../src/resources/base.ts","../src/resources/agents.ts","../src/resources/audio.ts","../src/resources/chat.ts","../src/resources/conversations.ts","../src/resources/discovery.ts","../src/resources/embeddings.ts","../src/resources/images.ts","../src/resources/keys.ts","../src/resources/portal.ts","../src/resources/public.ts","../src/resources/queue.ts","../src/resources/realtime.ts","../src/resources/usage.ts","../src/resources/video.ts","../src/resources/vision.ts","../src/client.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Helpers to point the official OpenAI / Anthropic SDKs at CanaryCoders AI's\n * drop-in compatible endpoints. Use the `provider/modelId` model-string format\n * (e.g. `\"openai/gpt-4o-mini\"`, `\"anthropic/claude-sonnet-4-5\"`).\n *\n * @example\n * import OpenAI from \"openai\";\n * import { openaiTarget } from \"@canarycoders/ai/compat\";\n * const oa = new OpenAI(openaiTarget(baseURL, apiKey));\n */\nexport interface CompatTarget {\n baseURL: string;\n apiKey: string;\n defaultHeaders?: Record<string, string>;\n}\n\nfunction v1(baseURL: string): string {\n return `${baseURL.replace(/\\/+$/, \"\")}/v1`;\n}\n\nexport function openaiTarget(baseURL: string, apiKey: string): CompatTarget {\n return { baseURL: v1(baseURL), apiKey };\n}\n\nexport function anthropicTarget(baseURL: string, apiKey: string): CompatTarget {\n return { baseURL: v1(baseURL), apiKey };\n}\n","export interface APIErrorInit {\n status?: number;\n code?: string | number;\n requestId?: string;\n headers?: Headers;\n details?: unknown;\n raw?: unknown;\n}\n\n/** Base class for every error the SDK throws from an API interaction. */\nexport class APIError extends Error {\n readonly status?: number;\n readonly code?: string | number;\n readonly requestId?: string;\n readonly headers?: Headers;\n readonly details?: unknown;\n readonly raw?: unknown;\n\n constructor(message: string, init: APIErrorInit = {}) {\n super(message);\n this.name = new.target.name;\n this.status = init.status;\n this.code = init.code;\n this.requestId = init.requestId;\n this.headers = init.headers;\n this.details = init.details;\n this.raw = init.raw;\n }\n}\n\nexport class BadRequestError extends APIError {\n /** parsed Zod issues from the server, when present */\n readonly validationIssues?: unknown;\n constructor(message: string, init: APIErrorInit = {}) {\n super(message, init);\n this.validationIssues = extractIssues(init.details);\n }\n}\nexport class AuthenticationError extends APIError {}\nexport class PermissionError extends APIError {}\nexport class NotFoundError extends APIError {}\nexport class ConflictError extends APIError {}\nexport class UnprocessableEntityError extends APIError {}\n\nexport class RateLimitError extends APIError {\n /** remaining request budget; only sent by the server in development */\n readonly remaining?: { minute: number; day: number };\n readonly retryAfterMs?: number;\n constructor(message: string, init: APIErrorInit = {}) {\n super(message, init);\n const d = init.details as\n | { remaining?: { minute: number; day: number } }\n | undefined;\n this.remaining = d?.remaining;\n this.retryAfterMs = parseRetryAfter(init.headers?.get(\"retry-after\"));\n }\n}\n\nexport class InternalServerError extends APIError {}\n\n/** Network-level failure (DNS, connection refused, TLS, reset). No HTTP status. */\nexport class APIConnectionError extends APIError {}\n\nexport class APIConnectionTimeoutError extends APIConnectionError {\n phase?: \"connect\" | \"read\" | \"total\";\n}\n\nfunction extractIssues(details: unknown): unknown {\n if (details && typeof details === \"object\" && \"issues\" in details) {\n return (details as { issues: unknown }).issues;\n }\n if (Array.isArray(details)) return details;\n return undefined;\n}\n\nfunction parseRetryAfter(value: string | null | undefined): number | undefined {\n if (!value) return undefined;\n const secs = Number(value);\n if (!Number.isNaN(secs)) return Math.max(0, secs * 1000);\n const date = Date.parse(value);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n return undefined;\n}\n\n/** Read a Response body without throwing on non-JSON. */\nasync function safeBody(response: Response): Promise<unknown> {\n const text = await response.text().catch(() => \"\");\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n/** Build a typed error from a failed Response (reads the body). */\nexport async function toAPIError(response: Response): Promise<APIError> {\n const body = await safeBody(response);\n return buildError(response.status, body, response.headers);\n}\n\n/** Build a typed error from an already-parsed body + status. */\nexport function buildError(\n status: number | undefined,\n body: unknown,\n headers?: Headers,\n): APIError {\n const requestId =\n headers?.get(\"x-request-id\") ??\n headers?.get(\"x-canary-request-id\") ??\n undefined;\n\n let message = `HTTP ${status ?? \"error\"}`;\n let code: string | number | undefined;\n let details: unknown;\n\n if (body && typeof body === \"object\") {\n const b = body as Record<string, unknown>;\n if (\"success\" in b && typeof b.error === \"string\") {\n // native: { success:false, error, code, details? }\n message = b.error;\n code = b.code as string | undefined;\n details = b.details;\n } else if (\n b.error &&\n typeof b.error === \"object\" &&\n typeof (b.error as Record<string, unknown>).message === \"string\"\n ) {\n // OpenAI-shaped: { error: { message, type, code } }\n const e = b.error as Record<string, unknown>;\n message = e.message as string;\n code = (e.code ?? e.type) as string | number | undefined;\n } else if (\n b.type === \"error\" &&\n b.error &&\n typeof (b.error as Record<string, unknown>).message === \"string\"\n ) {\n // Anthropic-shaped: { type:\"error\", error:{ type, message } }\n const e = b.error as Record<string, unknown>;\n message = e.message as string;\n code = e.type as string | undefined;\n } else if (typeof b.message === \"string\") {\n message = b.message;\n code = b.code as string | undefined;\n }\n } else if (typeof body === \"string\" && body) {\n message = body;\n }\n\n return errorFromStatus(status, message, {\n status,\n code,\n requestId,\n headers,\n details,\n raw: body,\n });\n}\n\nfunction errorFromStatus(\n status: number | undefined,\n message: string,\n init: APIErrorInit,\n): APIError {\n switch (true) {\n case status === 400:\n return new BadRequestError(message, init);\n case status === 401:\n return new AuthenticationError(message, init);\n case status === 403:\n return new PermissionError(message, init);\n case status === 404:\n return new NotFoundError(message, init);\n case status === 409:\n return new ConflictError(message, init);\n case status === 422:\n return new UnprocessableEntityError(message, init);\n case status === 429:\n return new RateLimitError(message, init);\n case typeof status === \"number\" && status >= 500:\n return new InternalServerError(message, init);\n default:\n return new APIError(message, init);\n }\n}\n\n/** Map a code (string or numeric HTTP status) to an HTTP status. */\nfunction statusFromCode(code: string | number | undefined): number | undefined {\n if (typeof code === \"number\") return code;\n switch (code) {\n case \"RATE_LIMIT_EXCEEDED\":\n case \"RATE_LIMITED\":\n return 429;\n case \"INVALID_API_KEY\":\n case \"MISSING_API_KEY\":\n case \"EXPIRED_KEY\":\n case \"INACTIVE_KEY\":\n return 401;\n case \"INSUFFICIENT_PERMISSIONS\":\n case \"ADMIN_REQUIRED\":\n return 403;\n case \"VALIDATION_ERROR\":\n return 400;\n case \"NOT_FOUND\":\n case \"TASK_NOT_FOUND\":\n return 404;\n default:\n return undefined;\n }\n}\n\n/** Build an error from a mid-stream SSE `error` payload. */\nexport function streamError(data: unknown): APIError {\n if (data && typeof data === \"object\") {\n const d = data as Record<string, unknown>;\n // native stream error: { error: string, code: string }\n if (typeof d.error === \"string\") {\n return buildError(statusFromCode(d.code as string), {\n success: false,\n error: d.error,\n code: d.code,\n });\n }\n // openai mid-stream error: { error: { message, type, code } }\n if (d.error && typeof d.error === \"object\") {\n const e = d.error as Record<string, unknown>;\n return buildError(statusFromCode(e.code as string | number), data);\n }\n }\n return new APIError(\"Stream error\", { raw: data });\n}\n","export type FetchLike = typeof globalThis.fetch;\n\n/** Resolve a fetch implementation: the override, else the global. */\nexport function resolveFetch(custom?: FetchLike): FetchLike {\n if (custom) return custom;\n if (typeof globalThis.fetch === \"function\") {\n return globalThis.fetch.bind(globalThis);\n }\n throw new Error(\n \"No global fetch found. Run on Node >= 18 or Bun, or pass a `fetch` implementation in the client options.\",\n );\n}\n\nexport function detectRuntime(): \"bun\" | \"node\" | \"unknown\" {\n if (typeof (globalThis as { Bun?: unknown }).Bun !== \"undefined\") return \"bun\";\n if (\n typeof process !== \"undefined\" &&\n typeof process.versions?.node === \"string\"\n ) {\n return \"node\";\n }\n return \"unknown\";\n}\n","import {\n APIConnectionError,\n APIConnectionTimeoutError,\n APIError,\n RateLimitError,\n} from \"./errors\";\n\nexport interface RetryPolicy {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n factor: number;\n}\n\nexport const DEFAULT_RETRY_POLICY: RetryPolicy = {\n maxRetries: 2,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n factor: 2,\n};\n\nexport interface RetryFlags {\n /** retry on 408 + 5xx */\n onStatus: boolean;\n /** retry on 429 */\n on429: boolean;\n /** retry on connection errors (reset/refused), excluding timeouts */\n onConnect: boolean;\n /** retry on connect/read/total timeouts */\n onTimeout: boolean;\n}\n\n/** Idempotent reads: retry freely. */\nexport const RETRY_IDEMPOTENT: RetryFlags = {\n onStatus: true,\n on429: true,\n onConnect: true,\n onTimeout: true,\n};\n\n/**\n * Non-idempotent submits: a 5xx may mean the job enqueued, so don't retry it\n * (would double-charge). A 429 means the request was rejected, so it's safe.\n * A timeout after bytes were sent is ambiguous, so don't retry it either.\n */\nexport const RETRY_SUBMIT: RetryFlags = {\n onStatus: false,\n on429: true,\n onConnect: true,\n onTimeout: false,\n};\n\nexport const RETRY_NONE: RetryFlags = {\n onStatus: false,\n on429: false,\n onConnect: false,\n onTimeout: false,\n};\n\nexport function shouldRetry(err: unknown, flags: RetryFlags): boolean {\n if (err instanceof RateLimitError) return flags.on429;\n if (err instanceof APIConnectionTimeoutError) return flags.onTimeout;\n if (err instanceof APIConnectionError) return flags.onConnect;\n if (err instanceof APIError && typeof err.status === \"number\") {\n return flags.onStatus && (err.status === 408 || err.status >= 500);\n }\n // raw network failure that escaped our wrapper\n if (err instanceof TypeError) return flags.onConnect;\n return false;\n}\n\n/** Exponential backoff with full jitter, honoring an explicit Retry-After. */\nexport function backoffDelay(\n attempt: number,\n policy: RetryPolicy,\n retryAfterMs?: number,\n): number {\n if (retryAfterMs !== undefined) return retryAfterMs;\n const ceiling = Math.min(\n policy.maxDelayMs,\n policy.baseDelayMs * Math.pow(policy.factor, attempt),\n );\n return Math.random() * ceiling;\n}\n","/** Promise that resolves after `ms`, or rejects if the signal aborts first. */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason);\n return;\n }\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(signal.reason);\n },\n { once: true },\n );\n });\n}\n","import {\n APIConnectionError,\n APIConnectionTimeoutError,\n APIError,\n RateLimitError,\n toAPIError,\n} from \"./errors\";\nimport { detectRuntime, resolveFetch, type FetchLike } from \"./fetch\";\nimport {\n backoffDelay,\n DEFAULT_RETRY_POLICY,\n RETRY_IDEMPOTENT,\n RETRY_NONE,\n RETRY_SUBMIT,\n type RetryFlags,\n type RetryPolicy,\n shouldRetry,\n} from \"./retry\";\nimport { sleep } from \"../utils/sleep\";\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\nexport type RetryMode = \"idempotent\" | \"submit\" | \"none\";\n\nexport interface TransportConfig {\n apiKey?: string;\n baseURL: string;\n authStyle: \"bearer\" | \"x-api-key\";\n timeoutMs: number;\n maxRetries: number;\n fetch?: FetchLike;\n defaultHeaders?: Record<string, string>;\n defaultTag?: string;\n userAgent?: string;\n}\n\nexport interface RequestOptions {\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n /** total timeout for this call; 0 disables (used for streams) */\n timeoutMs?: number;\n /** unwrap `{ success, data }` envelopes and return `data` (default true) */\n unwrap?: boolean;\n retry?: RetryMode;\n}\n\nconst RETRY_FLAGS: Record<RetryMode, RetryFlags> = {\n idempotent: RETRY_IDEMPOTENT,\n submit: RETRY_SUBMIT,\n none: RETRY_NONE,\n};\n\nexport class Transport {\n readonly baseURL: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n private readonly apiKey?: string;\n private readonly authStyle: \"bearer\" | \"x-api-key\";\n private readonly fetchImpl: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n private readonly defaultTag?: string;\n private readonly userAgent: string;\n private readonly retryPolicy: RetryPolicy;\n\n constructor(config: TransportConfig) {\n this.baseURL = config.baseURL.replace(/\\/+$/, \"\");\n this.apiKey = config.apiKey;\n this.authStyle = config.authStyle;\n this.timeoutMs = config.timeoutMs;\n this.maxRetries = config.maxRetries;\n this.fetchImpl = resolveFetch(config.fetch);\n this.defaultHeaders = config.defaultHeaders ?? {};\n this.defaultTag = config.defaultTag;\n this.userAgent = config.userAgent ?? `canaryllm-sdk (${detectRuntime()})`;\n this.retryPolicy = { ...DEFAULT_RETRY_POLICY, maxRetries: config.maxRetries };\n }\n\n async json<T>(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<T> {\n const res = await this.send(method, path, opts);\n if (!res.ok) throw await toAPIError(res);\n if (res.status === 204) return undefined as T;\n const body = await res.json().catch(() => undefined);\n return this.maybeUnwrap<T>(body, opts.unwrap);\n }\n\n /** Perform the request and return the Response without throwing on non-2xx. */\n async raw(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<Response> {\n return this.send(method, path, opts);\n }\n\n /** Perform the request and return the raw text body (CSV, YAML, …). */\n async text(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<string> {\n const res = await this.send(method, path, opts);\n if (!res.ok) throw await toAPIError(res);\n return res.text();\n }\n\n /** Perform the request and return the raw binary body (audio, …). */\n async bytes(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<ArrayBuffer> {\n const res = await this.send(method, path, opts);\n if (!res.ok) throw await toAPIError(res);\n return res.arrayBuffer();\n }\n\n /** Open a streaming response. Throws if the initial response is an error. */\n async stream(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<Response> {\n const res = await this.send(method, path, {\n ...opts,\n timeoutMs: opts.timeoutMs ?? 0,\n });\n if (!res.ok) throw await toAPIError(res);\n return res;\n }\n\n private maybeUnwrap<T>(body: unknown, unwrap: boolean | undefined): T {\n if (unwrap === false) return body as T;\n if (\n body &&\n typeof body === \"object\" &&\n \"success\" in body &&\n \"data\" in body\n ) {\n return (body as { data: T }).data;\n }\n return body as T;\n }\n\n private async send(\n method: HttpMethod,\n path: string,\n opts: RequestOptions,\n ): Promise<Response> {\n const url = this.buildUrl(path, opts.query);\n const hasBody = opts.body !== undefined;\n const isForm = hasBody && isFormData(opts.body);\n const headers = this.buildHeaders(opts.headers, hasBody && !isForm);\n const payload: BodyInit | undefined = !hasBody\n ? undefined\n : isForm\n ? (opts.body as BodyInit)\n : JSON.stringify(this.withDefaultTag(opts.body));\n const flags = RETRY_FLAGS[opts.retry ?? \"idempotent\"];\n const timeoutMs = opts.timeoutMs ?? this.timeoutMs;\n return this.withRetry(\n () => this.execute(method, url, headers, payload, opts.signal, timeoutMs),\n flags,\n opts.signal,\n );\n }\n\n private withDefaultTag(body: unknown): unknown {\n if (\n this.defaultTag &&\n body &&\n typeof body === \"object\" &&\n !Array.isArray(body) &&\n (body as Record<string, unknown>).tag === undefined\n ) {\n return { ...(body as Record<string, unknown>), tag: this.defaultTag };\n }\n return body;\n }\n\n private async withRetry(\n fn: () => Promise<Response>,\n flags: RetryFlags,\n signal: AbortSignal | undefined,\n ): Promise<Response> {\n let attempt = 0;\n for (;;) {\n try {\n const res = await fn();\n if (!res.ok && attempt < this.maxRetries) {\n const candidate = await toAPIError(res.clone());\n if (shouldRetry(candidate, flags)) {\n const retryAfter =\n candidate instanceof RateLimitError\n ? candidate.retryAfterMs\n : undefined;\n await sleep(backoffDelay(attempt, this.retryPolicy, retryAfter), signal);\n attempt++;\n continue;\n }\n }\n return res;\n } catch (err) {\n if (attempt < this.maxRetries && shouldRetry(err, flags)) {\n await sleep(backoffDelay(attempt, this.retryPolicy), signal);\n attempt++;\n continue;\n }\n throw err;\n }\n }\n }\n\n private async execute(\n method: HttpMethod,\n url: string,\n headers: Record<string, string>,\n body: BodyInit | undefined,\n signal: AbortSignal | undefined,\n timeoutMs: number,\n ): Promise<Response> {\n const { signal: composite, cleanup } = linkedSignal(signal, timeoutMs);\n try {\n return await this.fetchImpl(url, {\n method,\n headers,\n body,\n signal: composite,\n });\n } catch (err) {\n if (signal?.aborted) {\n throw signal.reason ?? new APIConnectionError(\"Request aborted\");\n }\n if (isTimeoutAbort(err)) {\n const e = new APIConnectionTimeoutError(\"Request timed out\");\n e.phase = \"total\";\n throw e;\n }\n if (err instanceof APIError) throw err;\n throw new APIConnectionError(\n err instanceof Error ? err.message : \"Connection error\",\n );\n } finally {\n cleanup();\n }\n }\n\n private buildHeaders(\n extra: Record<string, string> | undefined,\n hasBody: boolean,\n ): Record<string, string> {\n const h: Record<string, string> = {\n Accept: \"application/json\",\n ...this.defaultHeaders,\n ...(extra ?? {}),\n };\n if (hasBody && !(\"Content-Type\" in h)) {\n h[\"Content-Type\"] = \"application/json\";\n }\n if (this.apiKey) {\n if (this.authStyle === \"x-api-key\") h[\"X-API-Key\"] = this.apiKey;\n else h[\"Authorization\"] = `Bearer ${this.apiKey}`;\n }\n if (!(\"User-Agent\" in h)) h[\"User-Agent\"] = this.userAgent;\n return h;\n }\n\n private buildUrl(\n path: string,\n query: RequestOptions[\"query\"],\n ): string {\n let url = /^https?:\\/\\//.test(path)\n ? path\n : `${this.baseURL}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`;\n if (query) {\n const qs = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined) qs.set(k, String(v));\n }\n const s = qs.toString();\n if (s) url += (url.includes(\"?\") ? \"&\" : \"?\") + s;\n }\n return url;\n }\n}\n\nfunction isTimeoutAbort(err: unknown): boolean {\n return err instanceof Error && err.name === \"TimeoutError\";\n}\n\nfunction isFormData(v: unknown): v is FormData {\n return typeof FormData !== \"undefined\" && v instanceof FormData;\n}\n\nfunction linkedSignal(\n userSignal: AbortSignal | undefined,\n timeoutMs: number,\n): { signal: AbortSignal; cleanup: () => void } {\n const controller = new AbortController();\n const cleanups: Array<() => void> = [];\n\n if (userSignal) {\n if (userSignal.aborted) {\n controller.abort(userSignal.reason);\n } else {\n const onAbort = () => controller.abort(userSignal.reason);\n userSignal.addEventListener(\"abort\", onAbort, { once: true });\n cleanups.push(() => userSignal.removeEventListener(\"abort\", onAbort));\n }\n }\n\n if (timeoutMs && timeoutMs > 0) {\n const timer = setTimeout(\n () => controller.abort(new DOMException(\"Request timed out\", \"TimeoutError\")),\n timeoutMs,\n );\n cleanups.push(() => clearTimeout(timer));\n }\n\n return {\n signal: controller.signal,\n cleanup: () => {\n for (const c of cleanups) c();\n },\n };\n}\n","import type { JobStatus, PollOptions, TaskKind } from \"../types/queue\";\nimport { sleep } from \"../utils/sleep\";\nimport {\n APIConnectionError,\n APIConnectionTimeoutError,\n toAPIError,\n} from \"./errors\";\nimport type { APIError } from \"./errors\";\nimport type { Transport } from \"./http\";\n\n/** Per-task-kind wall-clock budget, matching the server's own timeouts. */\nconst DEFAULT_MAX_WAIT_MS: Record<TaskKind, number> = {\n completion: 35 * 60_000,\n image: 6 * 60_000,\n video: 65 * 60_000,\n tts: 6 * 60_000,\n stt: 12 * 60_000,\n \"sound-effect\": 6 * 60_000,\n music: 17 * 60_000,\n dialogue: 6 * 60_000,\n vision: 6 * 60_000,\n embedding: 6 * 60_000,\n};\n\ntype PollOutcome<T> =\n | { kind: \"completed\"; result: T }\n | { kind: \"processing\"; status: JobStatus; position?: number }\n | { kind: \"failed\"; error: APIError };\n\nasync function pollOnce<T>(\n transport: Transport,\n queueId: string,\n signal: AbortSignal | undefined,\n): Promise<PollOutcome<T>> {\n const res = await transport.raw(\"POST\", \"/api/llm/queue/result\", {\n body: { queueId },\n signal,\n retry: \"idempotent\",\n });\n\n if (res.status === 202) {\n const body = (await res.json().catch(() => ({}))) as {\n data?: { status?: JobStatus; position?: number };\n };\n return {\n kind: \"processing\",\n status: body.data?.status ?? \"processing\",\n position: body.data?.position,\n };\n }\n\n if (res.ok) {\n const body = (await res.json().catch(() => ({}))) as {\n data?: { result?: T };\n };\n return { kind: \"completed\", result: body.data?.result as T };\n }\n\n return { kind: \"failed\", error: await toAPIError(res) };\n}\n\n/** Submit-then-poll until the queued job resolves, fails, or the budget runs out. */\nexport async function pollToResult<T>(\n transport: Transport,\n queueId: string,\n taskKind: TaskKind,\n opts: PollOptions = {},\n): Promise<T> {\n const initial = opts.initialIntervalMs ?? 500;\n const factor = opts.backoffFactor ?? 1.5;\n const maxInterval = opts.maxIntervalMs ?? 5000;\n const jitter = opts.jitter ?? 0.2;\n const maxWait = opts.maxWaitMs ?? DEFAULT_MAX_WAIT_MS[taskKind];\n const signal = opts.signal;\n\n const start = Date.now();\n const deadline = start + maxWait;\n let interval = initial;\n\n for (;;) {\n signal?.throwIfAborted();\n\n let outcome: PollOutcome<T>;\n try {\n outcome = await pollOnce<T>(transport, queueId, signal);\n } catch (err) {\n // A transient network failure on a single poll shouldn't end the wait;\n // keep polling until the deadline. A user abort still propagates.\n if (signal?.aborted) throw err;\n if (err instanceof APIConnectionError) {\n outcome = { kind: \"processing\", status: \"processing\" };\n } else {\n throw err;\n }\n }\n\n if (outcome.kind === \"completed\") return outcome.result;\n if (outcome.kind === \"failed\") throw outcome.error;\n\n opts.onPoll?.({\n status: outcome.status,\n position: outcome.position,\n elapsedMs: Date.now() - start,\n });\n\n const now = Date.now();\n if (now >= deadline) {\n const err = new APIConnectionTimeoutError(\n `Queue task ${queueId} did not complete within ${maxWait}ms (last status: ${outcome.status})`,\n );\n err.phase = \"total\";\n throw err;\n }\n\n const base = Math.min(maxInterval, interval);\n const jittered = base * (1 - jitter * Math.random());\n const wait = Math.min(jittered, deadline - now);\n await sleep(Math.max(0, wait), signal);\n interval *= factor;\n }\n}\n","import { APIConnectionError, APIConnectionTimeoutError } from \"./errors\";\n\nexport interface SSEFrame {\n event?: string;\n id?: string;\n data: string;\n}\n\nexport interface SSEOptions {\n signal?: AbortSignal;\n /** abort the stream if no bytes arrive within this window */\n idleMs?: number;\n}\n\n/**\n * Read an SSE body as a sequence of frames. Runtime-agnostic (uses `getReader`\n * rather than async iteration). Handles CRLF, multi-line `data:`, comment\n * keep-alive lines, partial UTF-8 across chunks, and a trailing frame with no\n * final blank line.\n */\nexport async function* iterateSSE(\n body: ReadableStream<Uint8Array>,\n options: SSEOptions = {},\n): AsyncGenerator<SSEFrame> {\n const { signal, idleMs } = options;\n const reader = body.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n let idleFired = false;\n let userAborted = false;\n\n const onAbort = () => {\n userAborted = true;\n void reader.cancel(signal?.reason).catch(() => {});\n };\n if (signal) {\n if (signal.aborted) {\n reader.releaseLock();\n throw signal.reason ?? new APIConnectionError(\"Stream aborted\");\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n try {\n for (;;) {\n let timer: ReturnType<typeof setTimeout> | undefined;\n if (idleMs && idleMs > 0) {\n timer = setTimeout(() => {\n idleFired = true;\n void reader.cancel().catch(() => {});\n }, idleMs);\n }\n let done = false;\n let chunk: Uint8Array | undefined;\n try {\n const r = await reader.read();\n done = r.done;\n chunk = r.value;\n } finally {\n if (timer) clearTimeout(timer);\n }\n\n if (done) break;\n if (!chunk) continue;\n buffer += decoder.decode(chunk, { stream: true });\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n\n let sep: number;\n while ((sep = buffer.indexOf(\"\\n\\n\")) !== -1) {\n const rawFrame = buffer.slice(0, sep);\n buffer = buffer.slice(sep + 2);\n const frame = parseFrame(rawFrame);\n if (frame) yield frame;\n }\n }\n\n buffer += decoder.decode();\n if (buffer.trim()) {\n const frame = parseFrame(buffer);\n if (frame) yield frame;\n }\n } finally {\n if (signal) signal.removeEventListener(\"abort\", onAbort);\n try {\n reader.releaseLock();\n } catch {\n /* already released by cancel() */\n }\n }\n\n if (userAborted) {\n throw signal?.reason ?? new APIConnectionError(\"Stream aborted\");\n }\n if (idleFired) {\n const err = new APIConnectionTimeoutError(\"Stream idle timeout\");\n err.phase = \"read\";\n throw err;\n }\n}\n\nfunction parseFrame(raw: string): SSEFrame | null {\n let event: string | undefined;\n let id: string | undefined;\n const dataLines: string[] = [];\n let sawData = false;\n\n for (const line of raw.split(\"\\n\")) {\n if (line === \"\") continue;\n if (line.startsWith(\":\")) continue; // comment / keep-alive\n const idx = line.indexOf(\":\");\n const field = idx === -1 ? line : line.slice(0, idx);\n let value = idx === -1 ? \"\" : line.slice(idx + 1);\n if (value.startsWith(\" \")) value = value.slice(1);\n\n if (field === \"event\") event = value;\n else if (field === \"id\") id = value;\n else if (field === \"data\") {\n dataLines.push(value);\n sawData = true;\n }\n }\n\n if (!sawData && event === undefined) return null;\n return { event, id, data: dataLines.join(\"\\n\") };\n}\n","import type { ChatStreamEvent, StreamChunk } from \"../types/chat\";\nimport type { TokenUsage } from \"../types/common\";\nimport { APIError, streamError } from \"./errors\";\nimport { iterateSSE, type SSEFrame, type SSEOptions } from \"./sse\";\n\nexport type StreamProtocol = \"native\" | \"openai\" | \"anthropic\" | \"responses\";\n\nexport interface StreamAdapterOptions extends SSEOptions {\n /** attach the source payload as `raw` on each event (off by default) */\n includeRaw?: boolean;\n}\n\nfunction tryParse(data: string): unknown {\n try {\n return JSON.parse(data);\n } catch {\n return undefined;\n }\n}\n\n/** Turn a streaming Response into normalized chat events. */\nexport function streamResponse(\n response: Response,\n protocol: StreamProtocol,\n options: StreamAdapterOptions = {},\n): AsyncGenerator<ChatStreamEvent> {\n if (!response.body) {\n throw new APIError(\"Response has no body to stream\", {\n status: response.status,\n });\n }\n const frames = iterateSSE(response.body, options);\n const includeRaw = options.includeRaw ?? false;\n switch (protocol) {\n case \"openai\":\n return openAIAdapter(frames, includeRaw);\n case \"anthropic\":\n return anthropicAdapter(frames, includeRaw);\n case \"responses\":\n return responsesAdapter(frames, includeRaw);\n case \"native\":\n default:\n return nativeQueueAdapter(frames, includeRaw);\n }\n}\n\nexport async function* nativeQueueAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let lastUsage: TokenUsage | undefined;\n let lastFinish: string | undefined;\n\n for await (const frame of frames) {\n switch (frame.event) {\n case \"start\":\n yield { type: \"start\", raw: raw(frame.data) };\n break;\n case \"error\":\n throw streamError(tryParse(frame.data));\n case \"done\":\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n return;\n case \"chunk\": {\n const chunk = tryParse(frame.data) as StreamChunk | undefined;\n if (!chunk) break;\n if (chunk.usage) {\n lastUsage = chunk.usage;\n yield { type: \"usage\", usage: chunk.usage, raw: raw(chunk) };\n }\n if (chunk.finishReason) lastFinish = chunk.finishReason;\n if (chunk.toolCallDeltas) {\n for (const d of chunk.toolCallDeltas) {\n yield {\n type: \"tool_call\",\n index: d.index,\n id: d.id,\n name: d.function?.name,\n argsDelta: d.function?.arguments,\n raw: raw(d),\n };\n }\n }\n if (chunk.delta) {\n const isThinking = Boolean(\n (chunk.metadata as { isThinking?: boolean } | undefined)?.isThinking,\n );\n yield isThinking\n ? { type: \"thinking\", delta: chunk.delta, raw: raw(chunk) }\n : { type: \"text\", delta: chunk.delta, raw: raw(chunk) };\n }\n break;\n }\n }\n }\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n}\n\nexport async function* openAIAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let started = false;\n let lastUsage: TokenUsage | undefined;\n let lastFinish: string | undefined;\n\n for await (const frame of frames) {\n const data = frame.data.trim();\n if (data === \"[DONE]\") {\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n return;\n }\n const chunk = tryParse(data) as Record<string, any> | undefined;\n if (!chunk) continue;\n if (chunk.error) throw streamError(chunk);\n if (!started) {\n started = true;\n yield { type: \"start\", raw: raw(chunk) };\n }\n const choice = chunk.choices?.[0];\n if (choice) {\n const delta = choice.delta ?? {};\n if (delta.reasoning_content) {\n yield { type: \"thinking\", delta: delta.reasoning_content, raw: raw(chunk) };\n }\n if (typeof delta.content === \"string\" && delta.content) {\n yield { type: \"text\", delta: delta.content, raw: raw(chunk) };\n }\n if (Array.isArray(delta.tool_calls)) {\n for (const tc of delta.tool_calls) {\n yield {\n type: \"tool_call\",\n index: tc.index ?? 0,\n id: tc.id,\n name: tc.function?.name,\n argsDelta: tc.function?.arguments,\n raw: raw(tc),\n };\n }\n }\n if (choice.finish_reason) lastFinish = choice.finish_reason;\n }\n if (chunk.usage) {\n lastUsage = mapOpenAIUsage(chunk.usage);\n yield { type: \"usage\", usage: lastUsage, raw: raw(chunk) };\n }\n }\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n}\n\nexport async function* anthropicAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let lastUsage: TokenUsage | undefined;\n let lastFinish: string | undefined;\n\n for await (const frame of frames) {\n if (frame.event === \"ping\") continue;\n const data = tryParse(frame.data) as Record<string, any> | undefined;\n if (frame.event === \"error\") {\n throw streamError(data ?? { error: { message: \"stream error\" } });\n }\n switch (frame.event) {\n case \"message_start\":\n yield { type: \"start\", raw: raw(data) };\n break;\n case \"content_block_start\": {\n const cb = data?.content_block;\n if (cb?.type === \"tool_use\") {\n yield {\n type: \"tool_call\",\n index: data?.index ?? 0,\n id: cb.id,\n name: cb.name,\n raw: raw(data),\n };\n }\n break;\n }\n case \"content_block_delta\": {\n const d = data?.delta;\n if (d?.type === \"text_delta\" && d.text) {\n yield { type: \"text\", delta: d.text, raw: raw(data) };\n } else if (d?.type === \"thinking_delta\" && d.thinking) {\n yield { type: \"thinking\", delta: d.thinking, raw: raw(data) };\n } else if (d?.type === \"input_json_delta\" && d.partial_json) {\n yield {\n type: \"tool_call\",\n index: data?.index ?? 0,\n argsDelta: d.partial_json,\n raw: raw(data),\n };\n }\n break;\n }\n case \"message_delta\":\n if (data?.delta?.stop_reason) lastFinish = data.delta.stop_reason;\n if (data?.usage) lastUsage = mapAnthropicUsage(data.usage);\n break;\n case \"message_stop\":\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n return;\n }\n }\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n}\n\nexport async function* responsesAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let started = false;\n let lastUsage: TokenUsage | undefined;\n\n for await (const frame of frames) {\n const data = tryParse(frame.data) as Record<string, any> | undefined;\n if (frame.event === \"error\") throw streamError(data ?? {});\n switch (frame.event) {\n case \"response.created\":\n case \"response.in_progress\":\n if (!started) {\n started = true;\n yield { type: \"start\", raw: raw(data) };\n }\n break;\n case \"response.output_text.delta\":\n if (typeof data?.delta === \"string\") {\n yield { type: \"text\", delta: data.delta, raw: raw(data) };\n }\n break;\n case \"response.reasoning_summary_text.delta\":\n case \"response.reasoning_text.delta\":\n if (typeof data?.delta === \"string\") {\n yield { type: \"thinking\", delta: data.delta, raw: raw(data) };\n }\n break;\n case \"response.function_call_arguments.delta\":\n yield {\n type: \"tool_call\",\n index: data?.output_index ?? 0,\n argsDelta: typeof data?.delta === \"string\" ? data.delta : undefined,\n raw: raw(data),\n };\n break;\n case \"response.completed\":\n if (data?.response?.usage) lastUsage = mapResponsesUsage(data.response.usage);\n yield { type: \"done\", finishReason: \"stop\", usage: lastUsage };\n return;\n case \"response.failed\":\n throw streamError(\n data?.response?.error ? { error: data.response.error } : {},\n );\n default:\n yield { type: \"raw\", event: frame.event, data };\n }\n }\n yield { type: \"done\", usage: lastUsage };\n}\n\nfunction mapOpenAIUsage(u: Record<string, any>): TokenUsage {\n const input = u.prompt_tokens ?? 0;\n const output = u.completion_tokens ?? 0;\n return {\n inputTokens: input,\n outputTokens: output,\n totalTokens: u.total_tokens ?? input + output,\n cachedTokens: u.prompt_tokens_details?.cached_tokens,\n reasoningTokens: u.completion_tokens_details?.reasoning_tokens,\n };\n}\n\nfunction mapAnthropicUsage(u: Record<string, any>): TokenUsage {\n const input = u.input_tokens ?? 0;\n const output = u.output_tokens ?? 0;\n return {\n inputTokens: input,\n outputTokens: output,\n totalTokens: input + output,\n cachedTokens: u.cache_read_input_tokens,\n };\n}\n\nfunction mapResponsesUsage(u: Record<string, any>): TokenUsage {\n const input = u.input_tokens ?? 0;\n const output = u.output_tokens ?? 0;\n return {\n inputTokens: input,\n outputTokens: output,\n totalTokens: u.total_tokens ?? input + output,\n cachedTokens: u.input_tokens_details?.cached_tokens,\n reasoningTokens: u.output_tokens_details?.reasoning_tokens,\n };\n}\n","import type { ChatStreamEvent } from \"../types/chat\";\nimport type { JobSnapshot, PollOptions, TaskKind } from \"../types/queue\";\nimport { NotFoundError, toAPIError } from \"./errors\";\nimport type { Transport } from \"./http\";\nimport { pollToResult } from \"./poller\";\nimport { streamResponse } from \"./stream-adapters\";\n\nexport interface JobStreamOptions {\n signal?: AbortSignal;\n includeRaw?: boolean;\n /** abort the stream if no bytes arrive within this window (default 60s) */\n idleMs?: number;\n}\n\n/**\n * A handle to a queued task. Returned by the `*Job` / `.submit()` methods so\n * callers can hold the `id`, poll, stream, or cancel out of band.\n */\nexport class Job<T> {\n readonly id: string;\n private readonly transport: Transport;\n private readonly taskKind: TaskKind;\n private readonly defaultPoll?: PollOptions;\n private cachedValue?: { value: T };\n\n constructor(\n id: string,\n transport: Transport,\n taskKind: TaskKind,\n defaultPoll?: PollOptions,\n ) {\n this.id = id;\n this.transport = transport;\n this.taskKind = taskKind;\n this.defaultPoll = defaultPoll;\n }\n\n /** One-shot status probe. Throws `NotFoundError` unless `allowMissing`. */\n async status(\n opts: { signal?: AbortSignal; allowMissing?: boolean } = {},\n ): Promise<JobSnapshot> {\n const res = await this.transport.raw(\"POST\", \"/api/llm/queue/status\", {\n body: { queueId: this.id },\n signal: opts.signal,\n });\n if (!res.ok) throw await toAPIError(res);\n const body = (await res.json().catch(() => ({}))) as {\n data?: Record<string, any>;\n };\n const data: Record<string, any> = body.data ?? {};\n const snapshot: JobSnapshot = {\n id: this.id,\n status: (data.status as JobSnapshot[\"status\"]) ?? \"not_found\",\n position: data.position,\n createdAt: data.createdAt,\n startedAt: data.startedAt,\n completedAt: data.completedAt,\n provider: data.provider,\n model: data.model,\n error: data.error,\n };\n if (snapshot.status === \"not_found\" && !opts.allowMissing) {\n throw new NotFoundError(`Queue task ${this.id} not found`, {\n status: 404,\n code: \"TASK_NOT_FOUND\",\n });\n }\n return snapshot;\n }\n\n /** Poll to completion and resolve the typed result (cached after success). */\n async result(opts: PollOptions = {}): Promise<T> {\n if (this.cachedValue) return this.cachedValue.value;\n const merged: PollOptions = { ...this.defaultPoll, ...opts };\n const cancelOnAbort = merged.cancelServerOnAbort ?? true;\n try {\n const value = await pollToResult<T>(\n this.transport,\n this.id,\n this.taskKind,\n merged,\n );\n this.cachedValue = { value };\n return value;\n } catch (err) {\n if (cancelOnAbort && merged.signal?.aborted) {\n void this.cancel().catch(() => {});\n }\n throw err;\n }\n }\n\n /** Stream the task's chunks via `/queue/stream` (for `stream: true` tasks). */\n stream(opts: JobStreamOptions = {}): AsyncGenerator<ChatStreamEvent> {\n const transport = this.transport;\n const id = this.id;\n return (async function* () {\n const res = await transport.stream(\"POST\", \"/api/llm/queue/stream\", {\n body: { queueId: id },\n signal: opts.signal,\n });\n yield* streamResponse(res, \"native\", {\n signal: opts.signal,\n includeRaw: opts.includeRaw,\n idleMs: opts.idleMs ?? 60_000,\n });\n })();\n }\n\n /** Best-effort server cancel. Safe to call more than once. */\n async cancel(opts: { signal?: AbortSignal } = {}): Promise<void> {\n await this.transport.raw(\"POST\", \"/api/llm/queue/cancel\", {\n body: { queueId: this.id },\n signal: opts.signal,\n });\n }\n}\n\n/** Submit a queued request and return its `Job` handle. */\nexport async function submitJob<T>(\n transport: Transport,\n path: string,\n body: unknown,\n taskKind: TaskKind,\n signal?: AbortSignal,\n defaultPoll?: PollOptions,\n): Promise<Job<T>> {\n const data = await transport.json<{ queueId: string }>(\"POST\", path, {\n body,\n signal,\n retry: \"submit\",\n });\n return new Job<T>(data.queueId, transport, taskKind, defaultPoll);\n}\n","import type { Transport } from \"../core/http\";\nimport { submitJob } from \"../core/job\";\nimport type { Job } from \"../core/job\";\nimport type { PollOptions, TaskKind } from \"../types/queue\";\n\nexport class BaseResource {\n protected readonly transport: Transport;\n protected readonly defaultPoll?: PollOptions;\n\n constructor(transport: Transport, defaultPoll?: PollOptions) {\n this.transport = transport;\n this.defaultPoll = defaultPoll;\n }\n\n protected submitQueued<T>(\n path: string,\n body: unknown,\n kind: TaskKind,\n signal?: AbortSignal,\n ): Promise<Job<T>> {\n return submitJob<T>(this.transport, path, body, kind, signal, this.defaultPoll);\n }\n\n protected async runQueued<T>(\n path: string,\n body: unknown,\n kind: TaskKind,\n poll?: PollOptions,\n ): Promise<T> {\n const job = await this.submitQueued<T>(path, body, kind, poll?.signal);\n return job.result(poll);\n }\n}\n","import type { SignedUrlParams, SignedUrlResult } from \"../types/conversations\";\nimport { BaseResource } from \"./base\";\n\nexport class AgentsResource extends BaseResource {\n /** Mint a short-lived signed URL for an ElevenLabs agent. */\n signedUrl(\n params: SignedUrlParams,\n signal?: AbortSignal,\n ): Promise<SignedUrlResult> {\n return this.transport.json(\"POST\", \"/api/agents/signed-url\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n}\n","import type { Job } from \"../core/job\";\nimport type {\n DialogueParams,\n DialogueResult,\n MusicParams,\n MusicResult,\n SoundEffectParams,\n SoundEffectResult,\n SpeechParams,\n STTResult,\n TranscribeParams,\n TTSResult,\n} from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport class AudioResource extends BaseResource {\n /** Text-to-speech. */\n speech(params: SpeechParams, poll?: PollOptions): Promise<TTSResult> {\n return this.runQueued<TTSResult>(\n \"/api/llm/generate-audio\",\n params,\n \"tts\",\n poll,\n );\n }\n speechJob(params: SpeechParams, signal?: AbortSignal): Promise<Job<TTSResult>> {\n return this.submitQueued<TTSResult>(\n \"/api/llm/generate-audio\",\n params,\n \"tts\",\n signal,\n );\n }\n\n /** Speech-to-text. */\n transcribe(params: TranscribeParams, poll?: PollOptions): Promise<STTResult> {\n return this.runQueued<STTResult>(\n \"/api/llm/transcribe\",\n params,\n \"stt\",\n poll,\n );\n }\n transcribeJob(\n params: TranscribeParams,\n signal?: AbortSignal,\n ): Promise<Job<STTResult>> {\n return this.submitQueued<STTResult>(\n \"/api/llm/transcribe\",\n params,\n \"stt\",\n signal,\n );\n }\n\n soundEffect(\n params: SoundEffectParams,\n poll?: PollOptions,\n ): Promise<SoundEffectResult> {\n return this.runQueued<SoundEffectResult>(\n \"/api/llm/generate-sound-effect\",\n params,\n \"sound-effect\",\n poll,\n );\n }\n soundEffectJob(\n params: SoundEffectParams,\n signal?: AbortSignal,\n ): Promise<Job<SoundEffectResult>> {\n return this.submitQueued<SoundEffectResult>(\n \"/api/llm/generate-sound-effect\",\n params,\n \"sound-effect\",\n signal,\n );\n }\n\n music(params: MusicParams, poll?: PollOptions): Promise<MusicResult> {\n return this.runQueued<MusicResult>(\n \"/api/llm/generate-music\",\n params,\n \"music\",\n poll,\n );\n }\n musicJob(params: MusicParams, signal?: AbortSignal): Promise<Job<MusicResult>> {\n return this.submitQueued<MusicResult>(\n \"/api/llm/generate-music\",\n params,\n \"music\",\n signal,\n );\n }\n\n dialogue(params: DialogueParams, poll?: PollOptions): Promise<DialogueResult> {\n return this.runQueued<DialogueResult>(\n \"/api/llm/generate-dialogue\",\n params,\n \"dialogue\",\n poll,\n );\n }\n dialogueJob(\n params: DialogueParams,\n signal?: AbortSignal,\n ): Promise<Job<DialogueResult>> {\n return this.submitQueued<DialogueResult>(\n \"/api/llm/generate-dialogue\",\n params,\n \"dialogue\",\n signal,\n );\n }\n}\n","import { submitJob } from \"../core/job\";\nimport type { Job } from \"../core/job\";\nimport type {\n ChatStreamEvent,\n CompleteParams,\n CompletionResult,\n} from \"../types/chat\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport interface ChatStreamOptions {\n signal?: AbortSignal;\n includeRaw?: boolean;\n}\n\nexport class ChatResource extends BaseResource {\n /** Submit a completion and poll until the final result is ready. */\n complete(params: CompleteParams, poll?: PollOptions): Promise<CompletionResult> {\n return this.runQueued<CompletionResult>(\n \"/api/llm/complete\",\n params,\n \"completion\",\n poll,\n );\n }\n\n /** Submit a completion and return the `Job` handle without waiting. */\n submit(\n params: CompleteParams,\n signal?: AbortSignal,\n ): Promise<Job<CompletionResult>> {\n return this.submitQueued<CompletionResult>(\n \"/api/llm/complete\",\n params,\n \"completion\",\n signal,\n );\n }\n\n /** Stream a completion as normalized chat events. */\n stream(\n params: CompleteParams,\n opts: ChatStreamOptions = {},\n ): AsyncGenerator<ChatStreamEvent> {\n const transport = this.transport;\n const defaultPoll = this.defaultPoll;\n return (async function* () {\n const job = await submitJob<CompletionResult>(\n transport,\n \"/api/llm/complete\",\n { ...params, stream: true },\n \"completion\",\n opts.signal,\n defaultPoll,\n );\n yield* job.stream({ signal: opts.signal, includeRaw: opts.includeRaw });\n })();\n }\n}\n","import type {\n ConversationSession,\n ConversationSessionRecord,\n ConversationTemplate,\n ConversationTemplateParams,\n ConversationTemplateUpdate,\n CreateConversationSessionParams,\n} from \"../types/conversations\";\nimport { BaseResource } from \"./base\";\n\nclass TemplatesAPI extends BaseResource {\n create(\n params: ConversationTemplateParams,\n signal?: AbortSignal,\n ): Promise<ConversationTemplate> {\n return this.transport.json(\"POST\", \"/api/convagents/templates\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n\n list(signal?: AbortSignal): Promise<ConversationTemplate[]> {\n return this.transport.json(\"GET\", \"/api/convagents/templates\", { signal });\n }\n\n async get(id: number, signal?: AbortSignal): Promise<ConversationTemplate> {\n const data = await this.transport.json<{\n template: ConversationTemplate;\n }>(\"GET\", `/api/convagents/templates/${id}`, { signal });\n return data.template;\n }\n\n update(\n id: number,\n params: ConversationTemplateUpdate,\n signal?: AbortSignal,\n ): Promise<ConversationTemplate> {\n return this.transport.json(\"PUT\", `/api/convagents/templates/${id}`, {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n\n delete(id: number, signal?: AbortSignal): Promise<void> {\n return this.transport.json(\"DELETE\", `/api/convagents/templates/${id}`, {\n signal,\n });\n }\n}\n\nclass SessionsAPI extends BaseResource {\n create(\n params: CreateConversationSessionParams,\n signal?: AbortSignal,\n ): Promise<ConversationSession> {\n return this.transport.json(\"POST\", \"/api/convagents/sessions\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n\n list(\n opts: { templateId?: number } = {},\n signal?: AbortSignal,\n ): Promise<ConversationSessionRecord[]> {\n return this.transport.json(\"GET\", \"/api/convagents/sessions\", {\n query: { templateId: opts.templateId },\n signal,\n });\n }\n\n async get(\n id: number,\n signal?: AbortSignal,\n ): Promise<ConversationSessionRecord> {\n const data = await this.transport.json<{\n session: ConversationSessionRecord;\n }>(\"GET\", `/api/convagents/sessions/${id}`, { signal });\n return data.session;\n }\n\n /**\n * Fetch the session recording as raw audio bytes. Single use: the recording\n * is deleted from ElevenLabs on retrieval, so a second call rejects with 404.\n * Unfetched recordings are purged after 30 days.\n */\n getAudio(id: number, signal?: AbortSignal): Promise<ArrayBuffer> {\n return this.transport.bytes(\n \"GET\",\n `/api/convagents/sessions/${id}/audio`,\n { signal },\n );\n }\n}\n\nexport class ConversationsResource extends BaseResource {\n readonly templates = new TemplatesAPI(this.transport, this.defaultPoll);\n readonly sessions = new SessionsAPI(this.transport, this.defaultPoll);\n}\n","import type { ModelInfo, VoiceInfo } from \"../types/common\";\nimport { BaseResource } from \"./base\";\n\nexport class DiscoveryResource extends BaseResource {\n async providers(signal?: AbortSignal): Promise<string[]> {\n const data = await this.transport.json<{ providers: string[] }>(\n \"GET\",\n \"/api/llm/providers\",\n { signal },\n );\n return data.providers;\n }\n\n async models(provider: string, signal?: AbortSignal): Promise<ModelInfo[]> {\n const data = await this.transport.json<{ models: ModelInfo[] }>(\n \"GET\",\n \"/api/llm/models\",\n { query: { provider }, signal },\n );\n return data.models;\n }\n\n async voices(provider: string, signal?: AbortSignal): Promise<VoiceInfo[]> {\n const data = await this.transport.json<{ voices: VoiceInfo[] }>(\n \"GET\",\n \"/api/llm/voices\",\n { query: { provider }, signal },\n );\n return data.voices;\n }\n\n capabilities(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/llm/capabilities\", { signal });\n }\n\n concurrency(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/llm/concurrency\", { signal });\n }\n\n concurrencyFor(\n provider: string,\n signal?: AbortSignal,\n ): Promise<Record<string, any>> {\n return this.transport.json(\n \"GET\",\n `/api/llm/concurrency/${encodeURIComponent(provider)}`,\n { signal },\n );\n }\n}\n","import type { Job } from \"../core/job\";\nimport type { EmbeddingParams, EmbeddingResult } from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport class EmbeddingsResource extends BaseResource {\n /**\n * Embed one or more text inputs into vectors via a local embedding model\n * (LM Studio). Submits to the queue and resolves with the vectors. Content is\n * processed transiently by the gateway and never stored — intended for\n * customer-side RAG ingestion and retrieval.\n */\n create(params: EmbeddingParams, poll?: PollOptions): Promise<EmbeddingResult> {\n return this.runQueued<EmbeddingResult>(\n \"/api/llm/embeddings\",\n params,\n \"embedding\",\n poll,\n );\n }\n\n /** Handle form: returns a {@link Job} you can poll or cancel yourself. */\n createJob(\n params: EmbeddingParams,\n signal?: AbortSignal,\n ): Promise<Job<EmbeddingResult>> {\n return this.submitQueued<EmbeddingResult>(\n \"/api/llm/embeddings\",\n params,\n \"embedding\",\n signal,\n );\n }\n}\n","import type { Job } from \"../core/job\";\nimport type { ImageGenerateParams, ImageGenerationResult } from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport class ImagesResource extends BaseResource {\n /** Generate one or more images and wait for the result. */\n generate(\n params: ImageGenerateParams,\n poll?: PollOptions,\n ): Promise<ImageGenerationResult> {\n return this.runQueued<ImageGenerationResult>(\n \"/api/llm/generate-image\",\n params,\n \"image\",\n poll,\n );\n }\n\n /** Submit an image generation and return the `Job` handle. */\n generateJob(\n params: ImageGenerateParams,\n signal?: AbortSignal,\n ): Promise<Job<ImageGenerationResult>> {\n return this.submitQueued<ImageGenerationResult>(\n \"/api/llm/generate-image\",\n params,\n \"image\",\n signal,\n );\n }\n}\n","import { BaseResource } from \"./base\";\n\nexport interface KeyInfo {\n keyPrefix: string;\n name?: string;\n permissions: { read: boolean; write: boolean; admin?: boolean };\n rateLimits: { perMinute: number; perDay: number };\n expiresAt?: string;\n lastUsedAt?: string;\n createdAt?: string;\n}\n\nexport interface KeyValidation {\n success: boolean;\n valid: boolean;\n message?: string;\n data?: unknown;\n}\n\nexport class KeysResource extends BaseResource {\n /** Info about the key the client is authenticated with. */\n info(signal?: AbortSignal): Promise<KeyInfo> {\n return this.transport.json(\"GET\", \"/api/keys/info\", { signal });\n }\n\n /** Validate an API key. Returns `{ valid: false }` rather than throwing. */\n validate(apiKey: string, signal?: AbortSignal): Promise<KeyValidation> {\n return this.transport.json(\"POST\", \"/api/keys/validate\", {\n body: { apiKey },\n signal,\n unwrap: false,\n });\n }\n}\n","import { BaseResource } from \"./base\";\n\nexport interface PortalPeriod {\n year?: number;\n month?: number;\n}\n\nexport class PortalResource extends BaseResource {\n info(signal?: AbortSignal): Promise<Record<string, unknown>> {\n return this.transport.json(\"GET\", \"/api/portal/info\", { signal });\n }\n\n overview(\n period: PortalPeriod = {},\n signal?: AbortSignal,\n ): Promise<Record<string, unknown>> {\n return this.transport.json(\"GET\", \"/api/portal/overview\", {\n query: { year: period.year, month: period.month },\n signal,\n });\n }\n\n usageDaily(\n period: PortalPeriod = {},\n signal?: AbortSignal,\n ): Promise<unknown[]> {\n return this.transport.json(\"GET\", \"/api/portal/usage/daily\", {\n query: { year: period.year, month: period.month },\n signal,\n });\n }\n\n usageByModel(\n period: PortalPeriod = {},\n signal?: AbortSignal,\n ): Promise<unknown[]> {\n return this.transport.json(\"GET\", \"/api/portal/usage/by-model\", {\n query: { year: period.year, month: period.month },\n signal,\n });\n }\n\n /** Export a month of usage as CSV text. */\n exportUsage(\n params: { month: number; year: number },\n signal?: AbortSignal,\n ): Promise<string> {\n return this.transport.text(\"GET\", \"/api/portal/export/usage\", {\n query: { month: params.month, year: params.year },\n signal,\n });\n }\n}\n","import { BaseResource } from \"./base\";\n\n/** Unauthenticated endpoints. These work even without an API key. */\nexport class PublicResource extends BaseResource {\n /** All providers with their models and public pricing. */\n models(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/public/models\", { signal });\n }\n\n /** Available voices per provider. */\n voices(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/public/voices\", { signal });\n }\n\n /** A short spoken preview of a voice (base64 audio). */\n voicePreview(\n params: { provider: string; voiceId: string },\n signal?: AbortSignal,\n ): Promise<{ audio: string; mimeType: string; voiceId: string }> {\n return this.transport.json(\"POST\", \"/api/public/voices/preview\", {\n body: params,\n signal,\n });\n }\n\n /** The raw OpenAPI specification (YAML). */\n openapi(signal?: AbortSignal): Promise<string> {\n return this.transport.text(\"GET\", \"/api/public/openapi.yaml\", { signal });\n }\n}\n","import { Job } from \"../core/job\";\nimport type { ChatStreamEvent } from \"../types/chat\";\nimport type { JobSnapshot, PollOptions, TaskKind } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\n/** Low-level access to the queue by `queueId`, for tasks tracked out of band. */\nexport class QueueResource extends BaseResource {\n /** Reconstruct a `Job` handle from a known queue id. */\n job<T = unknown>(queueId: string, taskKind: TaskKind = \"completion\"): Job<T> {\n return new Job<T>(queueId, this.transport, taskKind, this.defaultPoll);\n }\n\n status(\n queueId: string,\n opts?: { signal?: AbortSignal; allowMissing?: boolean },\n ): Promise<JobSnapshot> {\n return this.job(queueId).status(opts);\n }\n\n result<T = unknown>(queueId: string, opts?: PollOptions): Promise<T> {\n return this.job<T>(queueId).result(opts);\n }\n\n stream(\n queueId: string,\n opts?: { signal?: AbortSignal; includeRaw?: boolean; idleMs?: number },\n ): AsyncGenerator<ChatStreamEvent> {\n return this.job(queueId).stream(opts);\n }\n\n cancel(queueId: string, opts?: { signal?: AbortSignal }): Promise<void> {\n return this.job(queueId).cancel(opts);\n }\n}\n","import type { ConversationSession } from \"../types/conversations\";\nimport type {\n BrokeredCredential,\n CreateRealtimeSessionParams,\n FinalizeRealtimeParams,\n RealtimeSession,\n RealtimeSessionRecord,\n} from \"../types/realtime\";\nimport { BaseResource } from \"./base\";\n\nclass RealtimeSessionsAPI extends BaseResource {\n /** Mint an ephemeral realtime credential. The response is NOT enveloped. */\n create(\n params: CreateRealtimeSessionParams,\n signal?: AbortSignal,\n ): Promise<RealtimeSession> {\n return this.transport.json(\"POST\", \"/api/realtime/sessions\", {\n body: params,\n signal,\n retry: \"submit\",\n unwrap: false,\n });\n }\n\n async get(id: number, signal?: AbortSignal): Promise<RealtimeSessionRecord> {\n const data = await this.transport.json<{ session: RealtimeSessionRecord }>(\n \"GET\",\n `/api/realtime/sessions/${id}`,\n { signal },\n );\n return data.session;\n }\n\n async end(\n id: number,\n params: FinalizeRealtimeParams = {},\n signal?: AbortSignal,\n ): Promise<RealtimeSessionRecord> {\n const data = await this.transport.json<{ session: RealtimeSessionRecord }>(\n \"POST\",\n `/api/realtime/sessions/${id}/end`,\n { body: params, signal },\n );\n return data.session;\n }\n}\n\nexport class RealtimeResource extends BaseResource {\n readonly sessions = new RealtimeSessionsAPI(this.transport, this.defaultPoll);\n}\n\n/**\n * Normalize a realtime or conversational session into a single credential\n * shape safe to hand to a frontend (only the short-lived secret, never the\n * API key).\n */\nexport function toBrokeredCredential(\n session: RealtimeSession | ConversationSession,\n): BrokeredCredential {\n if (\"clientSecret\" in session) {\n return {\n kind: \"openai-realtime\",\n sessionId: session.sessionId,\n token: session.clientSecret,\n url: session.webrtcUrl,\n expiresAt: session.expiresAt,\n expiresInMs: Math.max(0, Date.parse(session.expiresAt) - Date.now()),\n };\n }\n const expiresInMs = session.expiresIn * 1000;\n return {\n kind: \"elevenlabs-convai\",\n sessionId: session.session.id,\n url: session.signedUrl,\n expiresAt: new Date(Date.now() + expiresInMs).toISOString(),\n expiresInMs,\n };\n}\n","import { BaseResource } from \"./base\";\n\nexport interface UsageSummary {\n totalRequests: number;\n totalTokens: number;\n totalPrice?: number;\n [k: string]: unknown;\n}\n\nexport class UsageResource extends BaseResource {\n /** Current-month usage summary. */\n current(signal?: AbortSignal): Promise<UsageSummary> {\n return this.transport.json(\"GET\", \"/api/llm/usage\", { signal });\n }\n /** Monthly usage broken down by model/provider. */\n monthly(signal?: AbortSignal): Promise<unknown> {\n return this.transport.json(\"GET\", \"/api/llm/usage/monthly\", { signal });\n }\n /** Daily usage breakdown. */\n daily(signal?: AbortSignal): Promise<unknown> {\n return this.transport.json(\"GET\", \"/api/llm/usage/daily\", { signal });\n }\n}\n","import type { Job } from \"../core/job\";\nimport type {\n VideoGenerateParams,\n VideoGenerationResult,\n VideoUploadResult,\n} from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport interface VideoUploadOptions {\n filename?: string;\n mimeType?: string;\n signal?: AbortSignal;\n}\n\nexport class VideoResource extends BaseResource {\n generate(\n params: VideoGenerateParams,\n poll?: PollOptions,\n ): Promise<VideoGenerationResult> {\n return this.runQueued<VideoGenerationResult>(\n \"/api/llm/generate-video\",\n params,\n \"video\",\n poll,\n );\n }\n\n generateJob(\n params: VideoGenerateParams,\n signal?: AbortSignal,\n ): Promise<Job<VideoGenerationResult>> {\n return this.submitQueued<VideoGenerationResult>(\n \"/api/llm/generate-video\",\n params,\n \"video\",\n signal,\n );\n }\n\n /** Upload a seed video for image/video-to-video; returns a `fileId`. */\n async upload(\n file: Blob | Uint8Array | ArrayBuffer,\n opts: VideoUploadOptions = {},\n ): Promise<VideoUploadResult> {\n const form = new FormData();\n const blob =\n file instanceof Blob\n ? file\n : new Blob([file as BlobPart], { type: opts.mimeType });\n form.append(\"video\", blob, opts.filename ?? \"video\");\n return this.transport.json<VideoUploadResult>(\n \"POST\",\n \"/api/llm/upload-video\",\n { body: form, signal: opts.signal, retry: \"submit\" },\n );\n }\n}\n","import type { Job } from \"../core/job\";\nimport type { PollOptions } from \"../types/queue\";\nimport type {\n AutoLabelParams,\n AutoLabelResult,\n AutoTrainParams,\n DetectParams,\n FaceDetectionResult,\n FaceDetectParams,\n ImageRecognitionResult,\n TrainParams,\n TrainingJob,\n VisionModel,\n WebDetectionResult,\n WebDetectParams,\n ZeroShotDetectParams,\n} from \"../types/vision\";\nimport { BaseResource } from \"./base\";\n\nexport class VisionResource extends BaseResource {\n detect(\n params: DetectParams,\n poll?: PollOptions,\n ): Promise<ImageRecognitionResult> {\n return this.runQueued(\"/api/vision/detect\", params, \"vision\", poll);\n }\n detectJob(\n params: DetectParams,\n signal?: AbortSignal,\n ): Promise<Job<ImageRecognitionResult>> {\n return this.submitQueued(\"/api/vision/detect\", params, \"vision\", signal);\n }\n\n zeroShot(\n params: ZeroShotDetectParams,\n poll?: PollOptions,\n ): Promise<ImageRecognitionResult> {\n return this.runQueued(\n \"/api/vision/detect/zero-shot\",\n params,\n \"vision\",\n poll,\n );\n }\n zeroShotJob(\n params: ZeroShotDetectParams,\n signal?: AbortSignal,\n ): Promise<Job<ImageRecognitionResult>> {\n return this.submitQueued(\n \"/api/vision/detect/zero-shot\",\n params,\n \"vision\",\n signal,\n );\n }\n\n faces(\n params: FaceDetectParams,\n poll?: PollOptions,\n ): Promise<FaceDetectionResult> {\n return this.runQueued(\"/api/vision/detect/faces\", params, \"vision\", poll);\n }\n facesJob(\n params: FaceDetectParams,\n signal?: AbortSignal,\n ): Promise<Job<FaceDetectionResult>> {\n return this.submitQueued(\n \"/api/vision/detect/faces\",\n params,\n \"vision\",\n signal,\n );\n }\n\n web(\n params: WebDetectParams,\n poll?: PollOptions,\n ): Promise<WebDetectionResult> {\n return this.runQueued(\"/api/vision/detect/web\", params, \"vision\", poll);\n }\n webJob(\n params: WebDetectParams,\n signal?: AbortSignal,\n ): Promise<Job<WebDetectionResult>> {\n return this.submitQueued(\"/api/vision/detect/web\", params, \"vision\", signal);\n }\n\n autoLabel(\n params: AutoLabelParams,\n poll?: PollOptions,\n ): Promise<AutoLabelResult> {\n return this.runQueued(\"/api/vision/auto-label\", params, \"vision\", poll);\n }\n autoLabelJob(\n params: AutoLabelParams,\n signal?: AbortSignal,\n ): Promise<Job<AutoLabelResult>> {\n return this.submitQueued(\"/api/vision/auto-label\", params, \"vision\", signal);\n }\n\n autoTrain(\n params: AutoTrainParams,\n poll?: PollOptions,\n ): Promise<TrainingJob> {\n return this.runQueued(\"/api/vision/auto-train\", params, \"vision\", poll);\n }\n autoTrainJob(\n params: AutoTrainParams,\n signal?: AbortSignal,\n ): Promise<Job<TrainingJob>> {\n return this.submitQueued(\"/api/vision/auto-train\", params, \"vision\", signal);\n }\n\n /** Start a dataset training run (synchronous; returns a job record). */\n train(params: TrainParams, signal?: AbortSignal): Promise<TrainingJob> {\n return this.transport.json<TrainingJob>(\"POST\", \"/api/vision/train\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n getTraining(jobId: string, signal?: AbortSignal): Promise<TrainingJob> {\n return this.transport.json<TrainingJob>(\n \"GET\",\n `/api/vision/train/${encodeURIComponent(jobId)}`,\n { signal },\n );\n }\n listTraining(signal?: AbortSignal): Promise<TrainingJob[]> {\n return this.transport.json<TrainingJob[]>(\"GET\", \"/api/vision/train\", {\n signal,\n });\n }\n\n models(signal?: AbortSignal): Promise<VisionModel[]> {\n return this.transport.json<VisionModel[]>(\"GET\", \"/api/vision/models\", {\n signal,\n });\n }\n deleteModel(\n modelId: string,\n signal?: AbortSignal,\n ): Promise<{ deleted: boolean; modelId: string }> {\n return this.transport.json(\n \"DELETE\",\n `/api/vision/models/${encodeURIComponent(modelId)}`,\n { signal },\n );\n }\n}\n","import { anthropicTarget, type CompatTarget, openaiTarget } from \"./compat\";\nimport type { FetchLike } from \"./core/fetch\";\nimport { Transport } from \"./core/http\";\nimport { AgentsResource } from \"./resources/agents\";\nimport { AudioResource } from \"./resources/audio\";\nimport { ChatResource } from \"./resources/chat\";\nimport { ConversationsResource } from \"./resources/conversations\";\nimport { DiscoveryResource } from \"./resources/discovery\";\nimport { EmbeddingsResource } from \"./resources/embeddings\";\nimport { ImagesResource } from \"./resources/images\";\nimport { KeysResource } from \"./resources/keys\";\nimport { PortalResource } from \"./resources/portal\";\nimport { PublicResource } from \"./resources/public\";\nimport { QueueResource } from \"./resources/queue\";\nimport { RealtimeResource } from \"./resources/realtime\";\nimport { UsageResource } from \"./resources/usage\";\nimport { VideoResource } from \"./resources/video\";\nimport { VisionResource } from \"./resources/vision\";\nimport type { PollOptions } from \"./types/queue\";\n\nexport interface CanaryCodersAIOptions {\n /** API key. Defaults to `process.env.CANARY_AI_API_KEY` (legacy `CANARYLLM_API_KEY` still read). */\n apiKey?: string;\n /** Base URL. Defaults to `https://api.ai.canarycoders.es`. */\n baseURL?: string;\n /** Send the key as `Authorization: Bearer` (default) or `X-API-Key`. */\n authStyle?: \"bearer\" | \"x-api-key\";\n /** Per-request total timeout in ms (default 60000). */\n timeoutMs?: number;\n /** Automatic retries for transient failures (default 2). */\n maxRetries?: number;\n /** Override the fetch implementation (tests, proxies, custom agents). */\n fetch?: FetchLike;\n defaultHeaders?: Record<string, string>;\n /** Default `tag` attached to requests for usage attribution. */\n defaultTag?: string;\n /** Default polling behavior for queued operations. */\n poll?: PollOptions;\n}\n\nconst DEFAULT_BASE_URL = \"https://api.ai.canarycoders.es\";\n\nfunction readEnv(key: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) return process.env[key];\n return undefined;\n}\n\nexport class CanaryCodersAI {\n readonly chat: ChatResource;\n readonly queue: QueueResource;\n readonly images: ImagesResource;\n readonly video: VideoResource;\n readonly audio: AudioResource;\n readonly embeddings: EmbeddingsResource;\n readonly vision: VisionResource;\n readonly conversations: ConversationsResource;\n readonly agents: AgentsResource;\n readonly realtime: RealtimeResource;\n readonly discovery: DiscoveryResource;\n readonly usage: UsageResource;\n readonly portal: PortalResource;\n readonly keys: KeysResource;\n readonly public: PublicResource;\n\n private readonly transport: Transport;\n private readonly baseURL: string;\n private readonly apiKey?: string;\n\n constructor(options: CanaryCodersAIOptions = {}) {\n this.apiKey =\n options.apiKey ?? readEnv(\"CANARY_AI_API_KEY\") ?? readEnv(\"CANARYLLM_API_KEY\");\n this.baseURL =\n options.baseURL ??\n readEnv(\"CANARY_AI_BASE_URL\") ??\n readEnv(\"CANARYLLM_BASE_URL\") ??\n DEFAULT_BASE_URL;\n\n this.transport = new Transport({\n apiKey: this.apiKey,\n baseURL: this.baseURL,\n authStyle: options.authStyle ?? \"bearer\",\n timeoutMs: options.timeoutMs ?? 60_000,\n maxRetries: options.maxRetries ?? 2,\n fetch: options.fetch,\n defaultHeaders: options.defaultHeaders,\n defaultTag: options.defaultTag,\n });\n\n const poll = options.poll;\n this.chat = new ChatResource(this.transport, poll);\n this.queue = new QueueResource(this.transport, poll);\n this.images = new ImagesResource(this.transport, poll);\n this.video = new VideoResource(this.transport, poll);\n this.audio = new AudioResource(this.transport, poll);\n this.embeddings = new EmbeddingsResource(this.transport, poll);\n this.vision = new VisionResource(this.transport, poll);\n this.conversations = new ConversationsResource(this.transport, poll);\n this.agents = new AgentsResource(this.transport, poll);\n this.realtime = new RealtimeResource(this.transport, poll);\n this.discovery = new DiscoveryResource(this.transport, poll);\n this.usage = new UsageResource(this.transport, poll);\n this.portal = new PortalResource(this.transport, poll);\n this.keys = new KeysResource(this.transport, poll);\n this.public = new PublicResource(this.transport, poll);\n }\n\n /** Targets to plug into the official `openai` / `@anthropic-ai/sdk` clients. */\n get compat(): {\n openai: () => CompatTarget;\n anthropic: () => CompatTarget;\n } {\n return {\n openai: () => openaiTarget(this.baseURL, this.apiKey ?? \"\"),\n anthropic: () => anthropicTarget(this.baseURL, this.apiKey ?? \"\"),\n };\n }\n}\n","import { CanaryCodersAI } from \"./client\";\n\nexport { CanaryCodersAI };\nexport default CanaryCodersAI;\nexport type { CanaryCodersAIOptions } from \"./client\";\n\n/** @deprecated Renamed to `CanaryCodersAI`. Kept as an alias for backwards compatibility. */\nexport { CanaryCodersAI as CanaryLLM };\n/** @deprecated Renamed to `CanaryCodersAIOptions`. */\nexport type { CanaryCodersAIOptions as CanaryLLMOptions } from \"./client\";\n\n// Errors\nexport {\n APIError,\n APIConnectionError,\n APIConnectionTimeoutError,\n AuthenticationError,\n BadRequestError,\n ConflictError,\n InternalServerError,\n NotFoundError,\n PermissionError,\n RateLimitError,\n UnprocessableEntityError,\n} from \"./core/errors\";\n\n// Queue handle\nexport { Job } from \"./core/job\";\nexport type { JobStreamOptions } from \"./core/job\";\n\n// Streaming\nexport type {\n StreamAdapterOptions,\n StreamProtocol,\n} from \"./core/stream-adapters\";\n\n// Broker helper\nexport { toBrokeredCredential } from \"./resources/realtime\";\n\n// Compat helpers\nexport { anthropicTarget, openaiTarget, type CompatTarget } from \"./compat\";\n\n// Resource option/result types\nexport type { ChatStreamOptions } from \"./resources/chat\";\nexport type { KeyInfo, KeyValidation } from \"./resources/keys\";\nexport type { PortalPeriod } from \"./resources/portal\";\nexport type { UsageSummary } from \"./resources/usage\";\nexport type { VideoUploadOptions } from \"./resources/video\";\n\n// All wire types\nexport * from \"./types\";\n"]}
1
+ {"version":3,"sources":["../src/compat.ts","../src/core/errors.ts","../src/core/fetch.ts","../src/core/retry.ts","../src/utils/sleep.ts","../src/core/http.ts","../src/core/poller.ts","../src/core/sse.ts","../src/core/stream-adapters.ts","../src/core/job.ts","../src/resources/base.ts","../src/resources/agents.ts","../src/resources/audio.ts","../src/resources/chat.ts","../src/resources/conversations.ts","../src/resources/discovery.ts","../src/resources/embeddings.ts","../src/resources/images.ts","../src/resources/keys.ts","../src/resources/portal.ts","../src/resources/public.ts","../src/resources/queue.ts","../src/resources/realtime.ts","../src/resources/usage.ts","../src/resources/video.ts","../src/resources/vision.ts","../src/resources/ocr.ts","../src/client.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Helpers to point the official OpenAI / Anthropic SDKs at CanaryCoders AI's\n * drop-in compatible endpoints. Use the `provider/modelId` model-string format\n * (e.g. `\"openai/gpt-4o-mini\"`, `\"anthropic/claude-sonnet-4-5\"`).\n *\n * @example\n * import OpenAI from \"openai\";\n * import { openaiTarget } from \"@canarycoders/ai/compat\";\n * const oa = new OpenAI(openaiTarget(baseURL, apiKey));\n */\nexport interface CompatTarget {\n baseURL: string;\n apiKey: string;\n defaultHeaders?: Record<string, string>;\n}\n\nfunction v1(baseURL: string): string {\n return `${baseURL.replace(/\\/+$/, \"\")}/v1`;\n}\n\nexport function openaiTarget(baseURL: string, apiKey: string): CompatTarget {\n return { baseURL: v1(baseURL), apiKey };\n}\n\nexport function anthropicTarget(baseURL: string, apiKey: string): CompatTarget {\n return { baseURL: v1(baseURL), apiKey };\n}\n","export interface APIErrorInit {\n status?: number;\n code?: string | number;\n requestId?: string;\n headers?: Headers;\n details?: unknown;\n raw?: unknown;\n}\n\n/** Base class for every error the SDK throws from an API interaction. */\nexport class APIError extends Error {\n readonly status?: number;\n readonly code?: string | number;\n readonly requestId?: string;\n readonly headers?: Headers;\n readonly details?: unknown;\n readonly raw?: unknown;\n\n constructor(message: string, init: APIErrorInit = {}) {\n super(message);\n this.name = new.target.name;\n this.status = init.status;\n this.code = init.code;\n this.requestId = init.requestId;\n this.headers = init.headers;\n this.details = init.details;\n this.raw = init.raw;\n }\n}\n\nexport class BadRequestError extends APIError {\n /** parsed Zod issues from the server, when present */\n readonly validationIssues?: unknown;\n constructor(message: string, init: APIErrorInit = {}) {\n super(message, init);\n this.validationIssues = extractIssues(init.details);\n }\n}\nexport class AuthenticationError extends APIError {}\nexport class PermissionError extends APIError {}\nexport class NotFoundError extends APIError {}\nexport class ConflictError extends APIError {}\nexport class UnprocessableEntityError extends APIError {}\n\nexport class RateLimitError extends APIError {\n /** remaining request budget; only sent by the server in development */\n readonly remaining?: { minute: number; day: number };\n readonly retryAfterMs?: number;\n constructor(message: string, init: APIErrorInit = {}) {\n super(message, init);\n const d = init.details as\n | { remaining?: { minute: number; day: number } }\n | undefined;\n this.remaining = d?.remaining;\n this.retryAfterMs = parseRetryAfter(init.headers?.get(\"retry-after\"));\n }\n}\n\nexport class InternalServerError extends APIError {}\n\n/** Network-level failure (DNS, connection refused, TLS, reset). No HTTP status. */\nexport class APIConnectionError extends APIError {}\n\nexport class APIConnectionTimeoutError extends APIConnectionError {\n phase?: \"connect\" | \"read\" | \"total\";\n}\n\nfunction extractIssues(details: unknown): unknown {\n if (details && typeof details === \"object\" && \"issues\" in details) {\n return (details as { issues: unknown }).issues;\n }\n if (Array.isArray(details)) return details;\n return undefined;\n}\n\nfunction parseRetryAfter(value: string | null | undefined): number | undefined {\n if (!value) return undefined;\n const secs = Number(value);\n if (!Number.isNaN(secs)) return Math.max(0, secs * 1000);\n const date = Date.parse(value);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n return undefined;\n}\n\n/** Read a Response body without throwing on non-JSON. */\nasync function safeBody(response: Response): Promise<unknown> {\n const text = await response.text().catch(() => \"\");\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n/** Build a typed error from a failed Response (reads the body). */\nexport async function toAPIError(response: Response): Promise<APIError> {\n const body = await safeBody(response);\n return buildError(response.status, body, response.headers);\n}\n\n/** Build a typed error from an already-parsed body + status. */\nexport function buildError(\n status: number | undefined,\n body: unknown,\n headers?: Headers,\n): APIError {\n const requestId =\n headers?.get(\"x-request-id\") ??\n headers?.get(\"x-canary-request-id\") ??\n undefined;\n\n let message = `HTTP ${status ?? \"error\"}`;\n let code: string | number | undefined;\n let details: unknown;\n\n if (body && typeof body === \"object\") {\n const b = body as Record<string, unknown>;\n if (\"success\" in b && typeof b.error === \"string\") {\n // native: { success:false, error, code, details? }\n message = b.error;\n code = b.code as string | undefined;\n details = b.details;\n } else if (\n b.error &&\n typeof b.error === \"object\" &&\n typeof (b.error as Record<string, unknown>).message === \"string\"\n ) {\n // OpenAI-shaped: { error: { message, type, code } }\n const e = b.error as Record<string, unknown>;\n message = e.message as string;\n code = (e.code ?? e.type) as string | number | undefined;\n } else if (\n b.type === \"error\" &&\n b.error &&\n typeof (b.error as Record<string, unknown>).message === \"string\"\n ) {\n // Anthropic-shaped: { type:\"error\", error:{ type, message } }\n const e = b.error as Record<string, unknown>;\n message = e.message as string;\n code = e.type as string | undefined;\n } else if (typeof b.message === \"string\") {\n message = b.message;\n code = b.code as string | undefined;\n }\n } else if (typeof body === \"string\" && body) {\n message = body;\n }\n\n return errorFromStatus(status, message, {\n status,\n code,\n requestId,\n headers,\n details,\n raw: body,\n });\n}\n\nfunction errorFromStatus(\n status: number | undefined,\n message: string,\n init: APIErrorInit,\n): APIError {\n switch (true) {\n case status === 400:\n return new BadRequestError(message, init);\n case status === 401:\n return new AuthenticationError(message, init);\n case status === 403:\n return new PermissionError(message, init);\n case status === 404:\n return new NotFoundError(message, init);\n case status === 409:\n return new ConflictError(message, init);\n case status === 422:\n return new UnprocessableEntityError(message, init);\n case status === 429:\n return new RateLimitError(message, init);\n case typeof status === \"number\" && status >= 500:\n return new InternalServerError(message, init);\n default:\n return new APIError(message, init);\n }\n}\n\n/** Map a code (string or numeric HTTP status) to an HTTP status. */\nfunction statusFromCode(code: string | number | undefined): number | undefined {\n if (typeof code === \"number\") return code;\n switch (code) {\n case \"RATE_LIMIT_EXCEEDED\":\n case \"RATE_LIMITED\":\n return 429;\n case \"INVALID_API_KEY\":\n case \"MISSING_API_KEY\":\n case \"EXPIRED_KEY\":\n case \"INACTIVE_KEY\":\n return 401;\n case \"INSUFFICIENT_PERMISSIONS\":\n case \"ADMIN_REQUIRED\":\n return 403;\n case \"VALIDATION_ERROR\":\n return 400;\n case \"NOT_FOUND\":\n case \"TASK_NOT_FOUND\":\n return 404;\n default:\n return undefined;\n }\n}\n\n/** Build an error from a mid-stream SSE `error` payload. */\nexport function streamError(data: unknown): APIError {\n if (data && typeof data === \"object\") {\n const d = data as Record<string, unknown>;\n // native stream error: { error: string, code: string }\n if (typeof d.error === \"string\") {\n return buildError(statusFromCode(d.code as string), {\n success: false,\n error: d.error,\n code: d.code,\n });\n }\n // openai mid-stream error: { error: { message, type, code } }\n if (d.error && typeof d.error === \"object\") {\n const e = d.error as Record<string, unknown>;\n return buildError(statusFromCode(e.code as string | number), data);\n }\n }\n return new APIError(\"Stream error\", { raw: data });\n}\n","export type FetchLike = typeof globalThis.fetch;\n\n/** Resolve a fetch implementation: the override, else the global. */\nexport function resolveFetch(custom?: FetchLike): FetchLike {\n if (custom) return custom;\n if (typeof globalThis.fetch === \"function\") {\n return globalThis.fetch.bind(globalThis);\n }\n throw new Error(\n \"No global fetch found. Run on Node >= 18 or Bun, or pass a `fetch` implementation in the client options.\",\n );\n}\n\nexport function detectRuntime(): \"bun\" | \"node\" | \"unknown\" {\n if (typeof (globalThis as { Bun?: unknown }).Bun !== \"undefined\") return \"bun\";\n if (\n typeof process !== \"undefined\" &&\n typeof process.versions?.node === \"string\"\n ) {\n return \"node\";\n }\n return \"unknown\";\n}\n","import {\n APIConnectionError,\n APIConnectionTimeoutError,\n APIError,\n RateLimitError,\n} from \"./errors\";\n\nexport interface RetryPolicy {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n factor: number;\n}\n\nexport const DEFAULT_RETRY_POLICY: RetryPolicy = {\n maxRetries: 2,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n factor: 2,\n};\n\nexport interface RetryFlags {\n /** retry on 408 + 5xx */\n onStatus: boolean;\n /** retry on 429 */\n on429: boolean;\n /** retry on connection errors (reset/refused), excluding timeouts */\n onConnect: boolean;\n /** retry on connect/read/total timeouts */\n onTimeout: boolean;\n}\n\n/** Idempotent reads: retry freely. */\nexport const RETRY_IDEMPOTENT: RetryFlags = {\n onStatus: true,\n on429: true,\n onConnect: true,\n onTimeout: true,\n};\n\n/**\n * Non-idempotent submits: a 5xx may mean the job enqueued, so don't retry it\n * (would double-charge). A 429 means the request was rejected, so it's safe.\n * A timeout after bytes were sent is ambiguous, so don't retry it either.\n */\nexport const RETRY_SUBMIT: RetryFlags = {\n onStatus: false,\n on429: true,\n onConnect: true,\n onTimeout: false,\n};\n\nexport const RETRY_NONE: RetryFlags = {\n onStatus: false,\n on429: false,\n onConnect: false,\n onTimeout: false,\n};\n\nexport function shouldRetry(err: unknown, flags: RetryFlags): boolean {\n if (err instanceof RateLimitError) return flags.on429;\n if (err instanceof APIConnectionTimeoutError) return flags.onTimeout;\n if (err instanceof APIConnectionError) return flags.onConnect;\n if (err instanceof APIError && typeof err.status === \"number\") {\n return flags.onStatus && (err.status === 408 || err.status >= 500);\n }\n // raw network failure that escaped our wrapper\n if (err instanceof TypeError) return flags.onConnect;\n return false;\n}\n\n/** Exponential backoff with full jitter, honoring an explicit Retry-After. */\nexport function backoffDelay(\n attempt: number,\n policy: RetryPolicy,\n retryAfterMs?: number,\n): number {\n if (retryAfterMs !== undefined) return retryAfterMs;\n const ceiling = Math.min(\n policy.maxDelayMs,\n policy.baseDelayMs * Math.pow(policy.factor, attempt),\n );\n return Math.random() * ceiling;\n}\n","/** Promise that resolves after `ms`, or rejects if the signal aborts first. */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason);\n return;\n }\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(signal.reason);\n },\n { once: true },\n );\n });\n}\n","import {\n APIConnectionError,\n APIConnectionTimeoutError,\n APIError,\n RateLimitError,\n toAPIError,\n} from \"./errors\";\nimport { detectRuntime, resolveFetch, type FetchLike } from \"./fetch\";\nimport {\n backoffDelay,\n DEFAULT_RETRY_POLICY,\n RETRY_IDEMPOTENT,\n RETRY_NONE,\n RETRY_SUBMIT,\n type RetryFlags,\n type RetryPolicy,\n shouldRetry,\n} from \"./retry\";\nimport { sleep } from \"../utils/sleep\";\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\nexport type RetryMode = \"idempotent\" | \"submit\" | \"none\";\n\nexport interface TransportConfig {\n apiKey?: string;\n baseURL: string;\n authStyle: \"bearer\" | \"x-api-key\";\n timeoutMs: number;\n maxRetries: number;\n fetch?: FetchLike;\n defaultHeaders?: Record<string, string>;\n defaultTag?: string;\n userAgent?: string;\n}\n\nexport interface RequestOptions {\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n /** total timeout for this call; 0 disables (used for streams) */\n timeoutMs?: number;\n /** unwrap `{ success, data }` envelopes and return `data` (default true) */\n unwrap?: boolean;\n retry?: RetryMode;\n}\n\nconst RETRY_FLAGS: Record<RetryMode, RetryFlags> = {\n idempotent: RETRY_IDEMPOTENT,\n submit: RETRY_SUBMIT,\n none: RETRY_NONE,\n};\n\nexport class Transport {\n readonly baseURL: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n private readonly apiKey?: string;\n private readonly authStyle: \"bearer\" | \"x-api-key\";\n private readonly fetchImpl: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n private readonly defaultTag?: string;\n private readonly userAgent: string;\n private readonly retryPolicy: RetryPolicy;\n\n constructor(config: TransportConfig) {\n this.baseURL = config.baseURL.replace(/\\/+$/, \"\");\n this.apiKey = config.apiKey;\n this.authStyle = config.authStyle;\n this.timeoutMs = config.timeoutMs;\n this.maxRetries = config.maxRetries;\n this.fetchImpl = resolveFetch(config.fetch);\n this.defaultHeaders = config.defaultHeaders ?? {};\n this.defaultTag = config.defaultTag;\n this.userAgent = config.userAgent ?? `canaryllm-sdk (${detectRuntime()})`;\n this.retryPolicy = { ...DEFAULT_RETRY_POLICY, maxRetries: config.maxRetries };\n }\n\n async json<T>(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<T> {\n const res = await this.send(method, path, opts);\n if (!res.ok) throw await toAPIError(res);\n if (res.status === 204) return undefined as T;\n const body = await res.json().catch(() => undefined);\n return this.maybeUnwrap<T>(body, opts.unwrap);\n }\n\n /** Perform the request and return the Response without throwing on non-2xx. */\n async raw(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<Response> {\n return this.send(method, path, opts);\n }\n\n /** Perform the request and return the raw text body (CSV, YAML, …). */\n async text(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<string> {\n const res = await this.send(method, path, opts);\n if (!res.ok) throw await toAPIError(res);\n return res.text();\n }\n\n /** Perform the request and return the raw binary body (audio, …). */\n async bytes(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<ArrayBuffer> {\n const res = await this.send(method, path, opts);\n if (!res.ok) throw await toAPIError(res);\n return res.arrayBuffer();\n }\n\n /** Open a streaming response. Throws if the initial response is an error. */\n async stream(\n method: HttpMethod,\n path: string,\n opts: RequestOptions = {},\n ): Promise<Response> {\n const res = await this.send(method, path, {\n ...opts,\n timeoutMs: opts.timeoutMs ?? 0,\n });\n if (!res.ok) throw await toAPIError(res);\n return res;\n }\n\n private maybeUnwrap<T>(body: unknown, unwrap: boolean | undefined): T {\n if (unwrap === false) return body as T;\n if (\n body &&\n typeof body === \"object\" &&\n \"success\" in body &&\n \"data\" in body\n ) {\n return (body as { data: T }).data;\n }\n return body as T;\n }\n\n private async send(\n method: HttpMethod,\n path: string,\n opts: RequestOptions,\n ): Promise<Response> {\n const url = this.buildUrl(path, opts.query);\n const hasBody = opts.body !== undefined;\n const isForm = hasBody && isFormData(opts.body);\n const headers = this.buildHeaders(opts.headers, hasBody && !isForm);\n const payload: BodyInit | undefined = !hasBody\n ? undefined\n : isForm\n ? (opts.body as BodyInit)\n : JSON.stringify(this.withDefaultTag(opts.body));\n const flags = RETRY_FLAGS[opts.retry ?? \"idempotent\"];\n const timeoutMs = opts.timeoutMs ?? this.timeoutMs;\n return this.withRetry(\n () => this.execute(method, url, headers, payload, opts.signal, timeoutMs),\n flags,\n opts.signal,\n );\n }\n\n private withDefaultTag(body: unknown): unknown {\n if (\n this.defaultTag &&\n body &&\n typeof body === \"object\" &&\n !Array.isArray(body) &&\n (body as Record<string, unknown>).tag === undefined\n ) {\n return { ...(body as Record<string, unknown>), tag: this.defaultTag };\n }\n return body;\n }\n\n private async withRetry(\n fn: () => Promise<Response>,\n flags: RetryFlags,\n signal: AbortSignal | undefined,\n ): Promise<Response> {\n let attempt = 0;\n for (;;) {\n try {\n const res = await fn();\n if (!res.ok && attempt < this.maxRetries) {\n const candidate = await toAPIError(res.clone());\n if (shouldRetry(candidate, flags)) {\n const retryAfter =\n candidate instanceof RateLimitError\n ? candidate.retryAfterMs\n : undefined;\n await sleep(backoffDelay(attempt, this.retryPolicy, retryAfter), signal);\n attempt++;\n continue;\n }\n }\n return res;\n } catch (err) {\n if (attempt < this.maxRetries && shouldRetry(err, flags)) {\n await sleep(backoffDelay(attempt, this.retryPolicy), signal);\n attempt++;\n continue;\n }\n throw err;\n }\n }\n }\n\n private async execute(\n method: HttpMethod,\n url: string,\n headers: Record<string, string>,\n body: BodyInit | undefined,\n signal: AbortSignal | undefined,\n timeoutMs: number,\n ): Promise<Response> {\n const { signal: composite, cleanup } = linkedSignal(signal, timeoutMs);\n try {\n return await this.fetchImpl(url, {\n method,\n headers,\n body,\n signal: composite,\n });\n } catch (err) {\n if (signal?.aborted) {\n throw signal.reason ?? new APIConnectionError(\"Request aborted\");\n }\n if (isTimeoutAbort(err)) {\n const e = new APIConnectionTimeoutError(\"Request timed out\");\n e.phase = \"total\";\n throw e;\n }\n if (err instanceof APIError) throw err;\n throw new APIConnectionError(\n err instanceof Error ? err.message : \"Connection error\",\n );\n } finally {\n cleanup();\n }\n }\n\n private buildHeaders(\n extra: Record<string, string> | undefined,\n hasBody: boolean,\n ): Record<string, string> {\n const h: Record<string, string> = {\n Accept: \"application/json\",\n ...this.defaultHeaders,\n ...(extra ?? {}),\n };\n if (hasBody && !(\"Content-Type\" in h)) {\n h[\"Content-Type\"] = \"application/json\";\n }\n if (this.apiKey) {\n if (this.authStyle === \"x-api-key\") h[\"X-API-Key\"] = this.apiKey;\n else h[\"Authorization\"] = `Bearer ${this.apiKey}`;\n }\n if (!(\"User-Agent\" in h)) h[\"User-Agent\"] = this.userAgent;\n return h;\n }\n\n private buildUrl(\n path: string,\n query: RequestOptions[\"query\"],\n ): string {\n let url = /^https?:\\/\\//.test(path)\n ? path\n : `${this.baseURL}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`;\n if (query) {\n const qs = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined) qs.set(k, String(v));\n }\n const s = qs.toString();\n if (s) url += (url.includes(\"?\") ? \"&\" : \"?\") + s;\n }\n return url;\n }\n}\n\nfunction isTimeoutAbort(err: unknown): boolean {\n return err instanceof Error && err.name === \"TimeoutError\";\n}\n\nfunction isFormData(v: unknown): v is FormData {\n return typeof FormData !== \"undefined\" && v instanceof FormData;\n}\n\nfunction linkedSignal(\n userSignal: AbortSignal | undefined,\n timeoutMs: number,\n): { signal: AbortSignal; cleanup: () => void } {\n const controller = new AbortController();\n const cleanups: Array<() => void> = [];\n\n if (userSignal) {\n if (userSignal.aborted) {\n controller.abort(userSignal.reason);\n } else {\n const onAbort = () => controller.abort(userSignal.reason);\n userSignal.addEventListener(\"abort\", onAbort, { once: true });\n cleanups.push(() => userSignal.removeEventListener(\"abort\", onAbort));\n }\n }\n\n if (timeoutMs && timeoutMs > 0) {\n const timer = setTimeout(\n () => controller.abort(new DOMException(\"Request timed out\", \"TimeoutError\")),\n timeoutMs,\n );\n cleanups.push(() => clearTimeout(timer));\n }\n\n return {\n signal: controller.signal,\n cleanup: () => {\n for (const c of cleanups) c();\n },\n };\n}\n","import type { JobStatus, PollOptions, TaskKind } from \"../types/queue\";\nimport { sleep } from \"../utils/sleep\";\nimport {\n APIConnectionError,\n APIConnectionTimeoutError,\n toAPIError,\n} from \"./errors\";\nimport type { APIError } from \"./errors\";\nimport type { Transport } from \"./http\";\n\n/** Per-task-kind wall-clock budget, matching the server's own timeouts. */\nconst DEFAULT_MAX_WAIT_MS: Record<TaskKind, number> = {\n completion: 35 * 60_000,\n image: 6 * 60_000,\n video: 65 * 60_000,\n tts: 6 * 60_000,\n stt: 12 * 60_000,\n \"sound-effect\": 6 * 60_000,\n music: 17 * 60_000,\n dialogue: 6 * 60_000,\n vision: 6 * 60_000,\n embedding: 6 * 60_000,\n};\n\ntype PollOutcome<T> =\n | { kind: \"completed\"; result: T }\n | { kind: \"processing\"; status: JobStatus; position?: number }\n | { kind: \"failed\"; error: APIError };\n\nasync function pollOnce<T>(\n transport: Transport,\n queueId: string,\n signal: AbortSignal | undefined,\n): Promise<PollOutcome<T>> {\n const res = await transport.raw(\"POST\", \"/api/llm/queue/result\", {\n body: { queueId },\n signal,\n retry: \"idempotent\",\n });\n\n if (res.status === 202) {\n const body = (await res.json().catch(() => ({}))) as {\n data?: { status?: JobStatus; position?: number };\n };\n return {\n kind: \"processing\",\n status: body.data?.status ?? \"processing\",\n position: body.data?.position,\n };\n }\n\n if (res.ok) {\n const body = (await res.json().catch(() => ({}))) as {\n data?: { result?: T };\n };\n return { kind: \"completed\", result: body.data?.result as T };\n }\n\n return { kind: \"failed\", error: await toAPIError(res) };\n}\n\n/** Submit-then-poll until the queued job resolves, fails, or the budget runs out. */\nexport async function pollToResult<T>(\n transport: Transport,\n queueId: string,\n taskKind: TaskKind,\n opts: PollOptions = {},\n): Promise<T> {\n const initial = opts.initialIntervalMs ?? 500;\n const factor = opts.backoffFactor ?? 1.5;\n const maxInterval = opts.maxIntervalMs ?? 5000;\n const jitter = opts.jitter ?? 0.2;\n const maxWait = opts.maxWaitMs ?? DEFAULT_MAX_WAIT_MS[taskKind];\n const signal = opts.signal;\n\n const start = Date.now();\n const deadline = start + maxWait;\n let interval = initial;\n\n for (;;) {\n signal?.throwIfAborted();\n\n let outcome: PollOutcome<T>;\n try {\n outcome = await pollOnce<T>(transport, queueId, signal);\n } catch (err) {\n // A transient network failure on a single poll shouldn't end the wait;\n // keep polling until the deadline. A user abort still propagates.\n if (signal?.aborted) throw err;\n if (err instanceof APIConnectionError) {\n outcome = { kind: \"processing\", status: \"processing\" };\n } else {\n throw err;\n }\n }\n\n if (outcome.kind === \"completed\") return outcome.result;\n if (outcome.kind === \"failed\") throw outcome.error;\n\n opts.onPoll?.({\n status: outcome.status,\n position: outcome.position,\n elapsedMs: Date.now() - start,\n });\n\n const now = Date.now();\n if (now >= deadline) {\n const err = new APIConnectionTimeoutError(\n `Queue task ${queueId} did not complete within ${maxWait}ms (last status: ${outcome.status})`,\n );\n err.phase = \"total\";\n throw err;\n }\n\n const base = Math.min(maxInterval, interval);\n const jittered = base * (1 - jitter * Math.random());\n const wait = Math.min(jittered, deadline - now);\n await sleep(Math.max(0, wait), signal);\n interval *= factor;\n }\n}\n","import { APIConnectionError, APIConnectionTimeoutError } from \"./errors\";\n\nexport interface SSEFrame {\n event?: string;\n id?: string;\n data: string;\n}\n\nexport interface SSEOptions {\n signal?: AbortSignal;\n /** abort the stream if no bytes arrive within this window */\n idleMs?: number;\n}\n\n/**\n * Read an SSE body as a sequence of frames. Runtime-agnostic (uses `getReader`\n * rather than async iteration). Handles CRLF, multi-line `data:`, comment\n * keep-alive lines, partial UTF-8 across chunks, and a trailing frame with no\n * final blank line.\n */\nexport async function* iterateSSE(\n body: ReadableStream<Uint8Array>,\n options: SSEOptions = {},\n): AsyncGenerator<SSEFrame> {\n const { signal, idleMs } = options;\n const reader = body.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n let idleFired = false;\n let userAborted = false;\n\n const onAbort = () => {\n userAborted = true;\n void reader.cancel(signal?.reason).catch(() => {});\n };\n if (signal) {\n if (signal.aborted) {\n reader.releaseLock();\n throw signal.reason ?? new APIConnectionError(\"Stream aborted\");\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n try {\n for (;;) {\n let timer: ReturnType<typeof setTimeout> | undefined;\n if (idleMs && idleMs > 0) {\n timer = setTimeout(() => {\n idleFired = true;\n void reader.cancel().catch(() => {});\n }, idleMs);\n }\n let done = false;\n let chunk: Uint8Array | undefined;\n try {\n const r = await reader.read();\n done = r.done;\n chunk = r.value;\n } finally {\n if (timer) clearTimeout(timer);\n }\n\n if (done) break;\n if (!chunk) continue;\n buffer += decoder.decode(chunk, { stream: true });\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n\n let sep: number;\n while ((sep = buffer.indexOf(\"\\n\\n\")) !== -1) {\n const rawFrame = buffer.slice(0, sep);\n buffer = buffer.slice(sep + 2);\n const frame = parseFrame(rawFrame);\n if (frame) yield frame;\n }\n }\n\n buffer += decoder.decode();\n if (buffer.trim()) {\n const frame = parseFrame(buffer);\n if (frame) yield frame;\n }\n } finally {\n if (signal) signal.removeEventListener(\"abort\", onAbort);\n try {\n reader.releaseLock();\n } catch {\n /* already released by cancel() */\n }\n }\n\n if (userAborted) {\n throw signal?.reason ?? new APIConnectionError(\"Stream aborted\");\n }\n if (idleFired) {\n const err = new APIConnectionTimeoutError(\"Stream idle timeout\");\n err.phase = \"read\";\n throw err;\n }\n}\n\nfunction parseFrame(raw: string): SSEFrame | null {\n let event: string | undefined;\n let id: string | undefined;\n const dataLines: string[] = [];\n let sawData = false;\n\n for (const line of raw.split(\"\\n\")) {\n if (line === \"\") continue;\n if (line.startsWith(\":\")) continue; // comment / keep-alive\n const idx = line.indexOf(\":\");\n const field = idx === -1 ? line : line.slice(0, idx);\n let value = idx === -1 ? \"\" : line.slice(idx + 1);\n if (value.startsWith(\" \")) value = value.slice(1);\n\n if (field === \"event\") event = value;\n else if (field === \"id\") id = value;\n else if (field === \"data\") {\n dataLines.push(value);\n sawData = true;\n }\n }\n\n if (!sawData && event === undefined) return null;\n return { event, id, data: dataLines.join(\"\\n\") };\n}\n","import type { ChatStreamEvent, StreamChunk } from \"../types/chat\";\nimport type { TokenUsage } from \"../types/common\";\nimport { APIError, streamError } from \"./errors\";\nimport { iterateSSE, type SSEFrame, type SSEOptions } from \"./sse\";\n\nexport type StreamProtocol = \"native\" | \"openai\" | \"anthropic\" | \"responses\";\n\nexport interface StreamAdapterOptions extends SSEOptions {\n /** attach the source payload as `raw` on each event (off by default) */\n includeRaw?: boolean;\n}\n\nfunction tryParse(data: string): unknown {\n try {\n return JSON.parse(data);\n } catch {\n return undefined;\n }\n}\n\n/** Turn a streaming Response into normalized chat events. */\nexport function streamResponse(\n response: Response,\n protocol: StreamProtocol,\n options: StreamAdapterOptions = {},\n): AsyncGenerator<ChatStreamEvent> {\n if (!response.body) {\n throw new APIError(\"Response has no body to stream\", {\n status: response.status,\n });\n }\n const frames = iterateSSE(response.body, options);\n const includeRaw = options.includeRaw ?? false;\n switch (protocol) {\n case \"openai\":\n return openAIAdapter(frames, includeRaw);\n case \"anthropic\":\n return anthropicAdapter(frames, includeRaw);\n case \"responses\":\n return responsesAdapter(frames, includeRaw);\n case \"native\":\n default:\n return nativeQueueAdapter(frames, includeRaw);\n }\n}\n\nexport async function* nativeQueueAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let lastUsage: TokenUsage | undefined;\n let lastFinish: string | undefined;\n\n for await (const frame of frames) {\n switch (frame.event) {\n case \"start\":\n yield { type: \"start\", raw: raw(frame.data) };\n break;\n case \"error\":\n throw streamError(tryParse(frame.data));\n case \"done\":\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n return;\n case \"chunk\": {\n const chunk = tryParse(frame.data) as StreamChunk | undefined;\n if (!chunk) break;\n if (chunk.usage) {\n lastUsage = chunk.usage;\n yield { type: \"usage\", usage: chunk.usage, raw: raw(chunk) };\n }\n if (chunk.finishReason) lastFinish = chunk.finishReason;\n if (chunk.toolCallDeltas) {\n for (const d of chunk.toolCallDeltas) {\n yield {\n type: \"tool_call\",\n index: d.index,\n id: d.id,\n name: d.function?.name,\n argsDelta: d.function?.arguments,\n raw: raw(d),\n };\n }\n }\n if (chunk.delta) {\n const isThinking = Boolean(\n (chunk.metadata as { isThinking?: boolean } | undefined)?.isThinking,\n );\n yield isThinking\n ? { type: \"thinking\", delta: chunk.delta, raw: raw(chunk) }\n : { type: \"text\", delta: chunk.delta, raw: raw(chunk) };\n }\n break;\n }\n }\n }\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n}\n\nexport async function* openAIAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let started = false;\n let lastUsage: TokenUsage | undefined;\n let lastFinish: string | undefined;\n\n for await (const frame of frames) {\n const data = frame.data.trim();\n if (data === \"[DONE]\") {\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n return;\n }\n const chunk = tryParse(data) as Record<string, any> | undefined;\n if (!chunk) continue;\n if (chunk.error) throw streamError(chunk);\n if (!started) {\n started = true;\n yield { type: \"start\", raw: raw(chunk) };\n }\n const choice = chunk.choices?.[0];\n if (choice) {\n const delta = choice.delta ?? {};\n if (delta.reasoning_content) {\n yield { type: \"thinking\", delta: delta.reasoning_content, raw: raw(chunk) };\n }\n if (typeof delta.content === \"string\" && delta.content) {\n yield { type: \"text\", delta: delta.content, raw: raw(chunk) };\n }\n if (Array.isArray(delta.tool_calls)) {\n for (const tc of delta.tool_calls) {\n yield {\n type: \"tool_call\",\n index: tc.index ?? 0,\n id: tc.id,\n name: tc.function?.name,\n argsDelta: tc.function?.arguments,\n raw: raw(tc),\n };\n }\n }\n if (choice.finish_reason) lastFinish = choice.finish_reason;\n }\n if (chunk.usage) {\n lastUsage = mapOpenAIUsage(chunk.usage);\n yield { type: \"usage\", usage: lastUsage, raw: raw(chunk) };\n }\n }\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n}\n\nexport async function* anthropicAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let lastUsage: TokenUsage | undefined;\n let lastFinish: string | undefined;\n\n for await (const frame of frames) {\n if (frame.event === \"ping\") continue;\n const data = tryParse(frame.data) as Record<string, any> | undefined;\n if (frame.event === \"error\") {\n throw streamError(data ?? { error: { message: \"stream error\" } });\n }\n switch (frame.event) {\n case \"message_start\":\n yield { type: \"start\", raw: raw(data) };\n break;\n case \"content_block_start\": {\n const cb = data?.content_block;\n if (cb?.type === \"tool_use\") {\n yield {\n type: \"tool_call\",\n index: data?.index ?? 0,\n id: cb.id,\n name: cb.name,\n raw: raw(data),\n };\n }\n break;\n }\n case \"content_block_delta\": {\n const d = data?.delta;\n if (d?.type === \"text_delta\" && d.text) {\n yield { type: \"text\", delta: d.text, raw: raw(data) };\n } else if (d?.type === \"thinking_delta\" && d.thinking) {\n yield { type: \"thinking\", delta: d.thinking, raw: raw(data) };\n } else if (d?.type === \"input_json_delta\" && d.partial_json) {\n yield {\n type: \"tool_call\",\n index: data?.index ?? 0,\n argsDelta: d.partial_json,\n raw: raw(data),\n };\n }\n break;\n }\n case \"message_delta\":\n if (data?.delta?.stop_reason) lastFinish = data.delta.stop_reason;\n if (data?.usage) lastUsage = mapAnthropicUsage(data.usage);\n break;\n case \"message_stop\":\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n return;\n }\n }\n yield { type: \"done\", finishReason: lastFinish, usage: lastUsage };\n}\n\nexport async function* responsesAdapter(\n frames: AsyncIterable<SSEFrame>,\n includeRaw: boolean,\n): AsyncGenerator<ChatStreamEvent> {\n const raw = (v: unknown) => (includeRaw ? v : undefined);\n let started = false;\n let lastUsage: TokenUsage | undefined;\n\n for await (const frame of frames) {\n const data = tryParse(frame.data) as Record<string, any> | undefined;\n if (frame.event === \"error\") throw streamError(data ?? {});\n switch (frame.event) {\n case \"response.created\":\n case \"response.in_progress\":\n if (!started) {\n started = true;\n yield { type: \"start\", raw: raw(data) };\n }\n break;\n case \"response.output_text.delta\":\n if (typeof data?.delta === \"string\") {\n yield { type: \"text\", delta: data.delta, raw: raw(data) };\n }\n break;\n case \"response.reasoning_summary_text.delta\":\n case \"response.reasoning_text.delta\":\n if (typeof data?.delta === \"string\") {\n yield { type: \"thinking\", delta: data.delta, raw: raw(data) };\n }\n break;\n case \"response.function_call_arguments.delta\":\n yield {\n type: \"tool_call\",\n index: data?.output_index ?? 0,\n argsDelta: typeof data?.delta === \"string\" ? data.delta : undefined,\n raw: raw(data),\n };\n break;\n case \"response.completed\":\n if (data?.response?.usage) lastUsage = mapResponsesUsage(data.response.usage);\n yield { type: \"done\", finishReason: \"stop\", usage: lastUsage };\n return;\n case \"response.failed\":\n throw streamError(\n data?.response?.error ? { error: data.response.error } : {},\n );\n default:\n yield { type: \"raw\", event: frame.event, data };\n }\n }\n yield { type: \"done\", usage: lastUsage };\n}\n\nfunction mapOpenAIUsage(u: Record<string, any>): TokenUsage {\n const input = u.prompt_tokens ?? 0;\n const output = u.completion_tokens ?? 0;\n return {\n inputTokens: input,\n outputTokens: output,\n totalTokens: u.total_tokens ?? input + output,\n cachedTokens: u.prompt_tokens_details?.cached_tokens,\n reasoningTokens: u.completion_tokens_details?.reasoning_tokens,\n };\n}\n\nfunction mapAnthropicUsage(u: Record<string, any>): TokenUsage {\n const input = u.input_tokens ?? 0;\n const output = u.output_tokens ?? 0;\n return {\n inputTokens: input,\n outputTokens: output,\n totalTokens: input + output,\n cachedTokens: u.cache_read_input_tokens,\n };\n}\n\nfunction mapResponsesUsage(u: Record<string, any>): TokenUsage {\n const input = u.input_tokens ?? 0;\n const output = u.output_tokens ?? 0;\n return {\n inputTokens: input,\n outputTokens: output,\n totalTokens: u.total_tokens ?? input + output,\n cachedTokens: u.input_tokens_details?.cached_tokens,\n reasoningTokens: u.output_tokens_details?.reasoning_tokens,\n };\n}\n","import type { ChatStreamEvent } from \"../types/chat\";\nimport type { JobSnapshot, PollOptions, TaskKind } from \"../types/queue\";\nimport { NotFoundError, toAPIError } from \"./errors\";\nimport type { Transport } from \"./http\";\nimport { pollToResult } from \"./poller\";\nimport { streamResponse } from \"./stream-adapters\";\n\nexport interface JobStreamOptions {\n signal?: AbortSignal;\n includeRaw?: boolean;\n /** abort the stream if no bytes arrive within this window (default 60s) */\n idleMs?: number;\n}\n\n/**\n * A handle to a queued task. Returned by the `*Job` / `.submit()` methods so\n * callers can hold the `id`, poll, stream, or cancel out of band.\n */\nexport class Job<T> {\n readonly id: string;\n private readonly transport: Transport;\n private readonly taskKind: TaskKind;\n private readonly defaultPoll?: PollOptions;\n private cachedValue?: { value: T };\n\n constructor(\n id: string,\n transport: Transport,\n taskKind: TaskKind,\n defaultPoll?: PollOptions,\n ) {\n this.id = id;\n this.transport = transport;\n this.taskKind = taskKind;\n this.defaultPoll = defaultPoll;\n }\n\n /** One-shot status probe. Throws `NotFoundError` unless `allowMissing`. */\n async status(\n opts: { signal?: AbortSignal; allowMissing?: boolean } = {},\n ): Promise<JobSnapshot> {\n const res = await this.transport.raw(\"POST\", \"/api/llm/queue/status\", {\n body: { queueId: this.id },\n signal: opts.signal,\n });\n if (!res.ok) throw await toAPIError(res);\n const body = (await res.json().catch(() => ({}))) as {\n data?: Record<string, any>;\n };\n const data: Record<string, any> = body.data ?? {};\n const snapshot: JobSnapshot = {\n id: this.id,\n status: (data.status as JobSnapshot[\"status\"]) ?? \"not_found\",\n position: data.position,\n createdAt: data.createdAt,\n startedAt: data.startedAt,\n completedAt: data.completedAt,\n provider: data.provider,\n model: data.model,\n error: data.error,\n };\n if (snapshot.status === \"not_found\" && !opts.allowMissing) {\n throw new NotFoundError(`Queue task ${this.id} not found`, {\n status: 404,\n code: \"TASK_NOT_FOUND\",\n });\n }\n return snapshot;\n }\n\n /** Poll to completion and resolve the typed result (cached after success). */\n async result(opts: PollOptions = {}): Promise<T> {\n if (this.cachedValue) return this.cachedValue.value;\n const merged: PollOptions = { ...this.defaultPoll, ...opts };\n const cancelOnAbort = merged.cancelServerOnAbort ?? true;\n try {\n const value = await pollToResult<T>(\n this.transport,\n this.id,\n this.taskKind,\n merged,\n );\n this.cachedValue = { value };\n return value;\n } catch (err) {\n if (cancelOnAbort && merged.signal?.aborted) {\n void this.cancel().catch(() => {});\n }\n throw err;\n }\n }\n\n /** Stream the task's chunks via `/queue/stream` (for `stream: true` tasks). */\n stream(opts: JobStreamOptions = {}): AsyncGenerator<ChatStreamEvent> {\n const transport = this.transport;\n const id = this.id;\n return (async function* () {\n const res = await transport.stream(\"POST\", \"/api/llm/queue/stream\", {\n body: { queueId: id },\n signal: opts.signal,\n });\n yield* streamResponse(res, \"native\", {\n signal: opts.signal,\n includeRaw: opts.includeRaw,\n idleMs: opts.idleMs ?? 60_000,\n });\n })();\n }\n\n /** Best-effort server cancel. Safe to call more than once. */\n async cancel(opts: { signal?: AbortSignal } = {}): Promise<void> {\n await this.transport.raw(\"POST\", \"/api/llm/queue/cancel\", {\n body: { queueId: this.id },\n signal: opts.signal,\n });\n }\n}\n\n/** Submit a queued request and return its `Job` handle. */\nexport async function submitJob<T>(\n transport: Transport,\n path: string,\n body: unknown,\n taskKind: TaskKind,\n signal?: AbortSignal,\n defaultPoll?: PollOptions,\n): Promise<Job<T>> {\n const data = await transport.json<{ queueId: string }>(\"POST\", path, {\n body,\n signal,\n retry: \"submit\",\n });\n return new Job<T>(data.queueId, transport, taskKind, defaultPoll);\n}\n","import type { Transport } from \"../core/http\";\nimport { submitJob } from \"../core/job\";\nimport type { Job } from \"../core/job\";\nimport type { PollOptions, TaskKind } from \"../types/queue\";\n\nexport class BaseResource {\n protected readonly transport: Transport;\n protected readonly defaultPoll?: PollOptions;\n\n constructor(transport: Transport, defaultPoll?: PollOptions) {\n this.transport = transport;\n this.defaultPoll = defaultPoll;\n }\n\n protected submitQueued<T>(\n path: string,\n body: unknown,\n kind: TaskKind,\n signal?: AbortSignal,\n ): Promise<Job<T>> {\n return submitJob<T>(this.transport, path, body, kind, signal, this.defaultPoll);\n }\n\n protected async runQueued<T>(\n path: string,\n body: unknown,\n kind: TaskKind,\n poll?: PollOptions,\n ): Promise<T> {\n const job = await this.submitQueued<T>(path, body, kind, poll?.signal);\n return job.result(poll);\n }\n}\n","import type { SignedUrlParams, SignedUrlResult } from \"../types/conversations\";\nimport { BaseResource } from \"./base\";\n\nexport class AgentsResource extends BaseResource {\n /** Mint a short-lived signed URL for an ElevenLabs agent. */\n signedUrl(\n params: SignedUrlParams,\n signal?: AbortSignal,\n ): Promise<SignedUrlResult> {\n return this.transport.json(\"POST\", \"/api/agents/signed-url\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n}\n","import type { Job } from \"../core/job\";\nimport type {\n DialogueParams,\n DialogueResult,\n MusicParams,\n MusicResult,\n SoundEffectParams,\n SoundEffectResult,\n SpeechParams,\n STTResult,\n TranscribeParams,\n TTSResult,\n} from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport class AudioResource extends BaseResource {\n /** Text-to-speech. */\n speech(params: SpeechParams, poll?: PollOptions): Promise<TTSResult> {\n return this.runQueued<TTSResult>(\n \"/api/llm/generate-audio\",\n params,\n \"tts\",\n poll,\n );\n }\n speechJob(params: SpeechParams, signal?: AbortSignal): Promise<Job<TTSResult>> {\n return this.submitQueued<TTSResult>(\n \"/api/llm/generate-audio\",\n params,\n \"tts\",\n signal,\n );\n }\n\n /** Speech-to-text. */\n transcribe(params: TranscribeParams, poll?: PollOptions): Promise<STTResult> {\n return this.runQueued<STTResult>(\n \"/api/llm/transcribe\",\n params,\n \"stt\",\n poll,\n );\n }\n transcribeJob(\n params: TranscribeParams,\n signal?: AbortSignal,\n ): Promise<Job<STTResult>> {\n return this.submitQueued<STTResult>(\n \"/api/llm/transcribe\",\n params,\n \"stt\",\n signal,\n );\n }\n\n soundEffect(\n params: SoundEffectParams,\n poll?: PollOptions,\n ): Promise<SoundEffectResult> {\n return this.runQueued<SoundEffectResult>(\n \"/api/llm/generate-sound-effect\",\n params,\n \"sound-effect\",\n poll,\n );\n }\n soundEffectJob(\n params: SoundEffectParams,\n signal?: AbortSignal,\n ): Promise<Job<SoundEffectResult>> {\n return this.submitQueued<SoundEffectResult>(\n \"/api/llm/generate-sound-effect\",\n params,\n \"sound-effect\",\n signal,\n );\n }\n\n music(params: MusicParams, poll?: PollOptions): Promise<MusicResult> {\n return this.runQueued<MusicResult>(\n \"/api/llm/generate-music\",\n params,\n \"music\",\n poll,\n );\n }\n musicJob(params: MusicParams, signal?: AbortSignal): Promise<Job<MusicResult>> {\n return this.submitQueued<MusicResult>(\n \"/api/llm/generate-music\",\n params,\n \"music\",\n signal,\n );\n }\n\n dialogue(params: DialogueParams, poll?: PollOptions): Promise<DialogueResult> {\n return this.runQueued<DialogueResult>(\n \"/api/llm/generate-dialogue\",\n params,\n \"dialogue\",\n poll,\n );\n }\n dialogueJob(\n params: DialogueParams,\n signal?: AbortSignal,\n ): Promise<Job<DialogueResult>> {\n return this.submitQueued<DialogueResult>(\n \"/api/llm/generate-dialogue\",\n params,\n \"dialogue\",\n signal,\n );\n }\n}\n","import { submitJob } from \"../core/job\";\nimport type { Job } from \"../core/job\";\nimport type {\n ChatStreamEvent,\n CompleteParams,\n CompletionResult,\n} from \"../types/chat\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport interface ChatStreamOptions {\n signal?: AbortSignal;\n includeRaw?: boolean;\n}\n\nexport class ChatResource extends BaseResource {\n /** Submit a completion and poll until the final result is ready. */\n complete(params: CompleteParams, poll?: PollOptions): Promise<CompletionResult> {\n return this.runQueued<CompletionResult>(\n \"/api/llm/complete\",\n params,\n \"completion\",\n poll,\n );\n }\n\n /** Submit a completion and return the `Job` handle without waiting. */\n submit(\n params: CompleteParams,\n signal?: AbortSignal,\n ): Promise<Job<CompletionResult>> {\n return this.submitQueued<CompletionResult>(\n \"/api/llm/complete\",\n params,\n \"completion\",\n signal,\n );\n }\n\n /** Stream a completion as normalized chat events. */\n stream(\n params: CompleteParams,\n opts: ChatStreamOptions = {},\n ): AsyncGenerator<ChatStreamEvent> {\n const transport = this.transport;\n const defaultPoll = this.defaultPoll;\n return (async function* () {\n const job = await submitJob<CompletionResult>(\n transport,\n \"/api/llm/complete\",\n { ...params, stream: true },\n \"completion\",\n opts.signal,\n defaultPoll,\n );\n yield* job.stream({ signal: opts.signal, includeRaw: opts.includeRaw });\n })();\n }\n}\n","import type {\n ConversationSession,\n ConversationSessionRecord,\n ConversationTemplate,\n ConversationTemplateParams,\n ConversationTemplateUpdate,\n CreateConversationSessionParams,\n} from \"../types/conversations\";\nimport { BaseResource } from \"./base\";\n\nclass TemplatesAPI extends BaseResource {\n create(\n params: ConversationTemplateParams,\n signal?: AbortSignal,\n ): Promise<ConversationTemplate> {\n return this.transport.json(\"POST\", \"/api/convagents/templates\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n\n list(signal?: AbortSignal): Promise<ConversationTemplate[]> {\n return this.transport.json(\"GET\", \"/api/convagents/templates\", { signal });\n }\n\n async get(id: number, signal?: AbortSignal): Promise<ConversationTemplate> {\n const data = await this.transport.json<{\n template: ConversationTemplate;\n }>(\"GET\", `/api/convagents/templates/${id}`, { signal });\n return data.template;\n }\n\n update(\n id: number,\n params: ConversationTemplateUpdate,\n signal?: AbortSignal,\n ): Promise<ConversationTemplate> {\n return this.transport.json(\"PUT\", `/api/convagents/templates/${id}`, {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n\n delete(id: number, signal?: AbortSignal): Promise<void> {\n return this.transport.json(\"DELETE\", `/api/convagents/templates/${id}`, {\n signal,\n });\n }\n}\n\nclass SessionsAPI extends BaseResource {\n create(\n params: CreateConversationSessionParams,\n signal?: AbortSignal,\n ): Promise<ConversationSession> {\n return this.transport.json(\"POST\", \"/api/convagents/sessions\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n\n list(\n opts: { templateId?: number } = {},\n signal?: AbortSignal,\n ): Promise<ConversationSessionRecord[]> {\n return this.transport.json(\"GET\", \"/api/convagents/sessions\", {\n query: { templateId: opts.templateId },\n signal,\n });\n }\n\n async get(\n id: number,\n signal?: AbortSignal,\n ): Promise<ConversationSessionRecord> {\n const data = await this.transport.json<{\n session: ConversationSessionRecord;\n }>(\"GET\", `/api/convagents/sessions/${id}`, { signal });\n return data.session;\n }\n\n /**\n * Fetch the session recording as raw audio bytes. Single use: the recording\n * is deleted from ElevenLabs on retrieval, so a second call rejects with 404.\n * Unfetched recordings are purged after 30 days.\n */\n getAudio(id: number, signal?: AbortSignal): Promise<ArrayBuffer> {\n return this.transport.bytes(\n \"GET\",\n `/api/convagents/sessions/${id}/audio`,\n { signal },\n );\n }\n}\n\nexport class ConversationsResource extends BaseResource {\n readonly templates = new TemplatesAPI(this.transport, this.defaultPoll);\n readonly sessions = new SessionsAPI(this.transport, this.defaultPoll);\n}\n","import type { ModelInfo, VoiceInfo } from \"../types/common\";\nimport { BaseResource } from \"./base\";\n\nexport class DiscoveryResource extends BaseResource {\n async providers(signal?: AbortSignal): Promise<string[]> {\n const data = await this.transport.json<{ providers: string[] }>(\n \"GET\",\n \"/api/llm/providers\",\n { signal },\n );\n return data.providers;\n }\n\n async models(provider: string, signal?: AbortSignal): Promise<ModelInfo[]> {\n const data = await this.transport.json<{ models: ModelInfo[] }>(\n \"GET\",\n \"/api/llm/models\",\n { query: { provider }, signal },\n );\n return data.models;\n }\n\n async voices(provider: string, signal?: AbortSignal): Promise<VoiceInfo[]> {\n const data = await this.transport.json<{ voices: VoiceInfo[] }>(\n \"GET\",\n \"/api/llm/voices\",\n { query: { provider }, signal },\n );\n return data.voices;\n }\n\n capabilities(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/llm/capabilities\", { signal });\n }\n\n concurrency(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/llm/concurrency\", { signal });\n }\n\n concurrencyFor(\n provider: string,\n signal?: AbortSignal,\n ): Promise<Record<string, any>> {\n return this.transport.json(\n \"GET\",\n `/api/llm/concurrency/${encodeURIComponent(provider)}`,\n { signal },\n );\n }\n}\n","import type { Job } from \"../core/job\";\nimport type { EmbeddingParams, EmbeddingResult } from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport class EmbeddingsResource extends BaseResource {\n /**\n * Embed one or more text inputs into vectors via a local embedding model\n * (LM Studio). Submits to the queue and resolves with the vectors. Content is\n * processed transiently by the gateway and never stored — intended for\n * customer-side RAG ingestion and retrieval.\n */\n create(params: EmbeddingParams, poll?: PollOptions): Promise<EmbeddingResult> {\n return this.runQueued<EmbeddingResult>(\n \"/api/llm/embeddings\",\n params,\n \"embedding\",\n poll,\n );\n }\n\n /** Handle form: returns a {@link Job} you can poll or cancel yourself. */\n createJob(\n params: EmbeddingParams,\n signal?: AbortSignal,\n ): Promise<Job<EmbeddingResult>> {\n return this.submitQueued<EmbeddingResult>(\n \"/api/llm/embeddings\",\n params,\n \"embedding\",\n signal,\n );\n }\n}\n","import type { Job } from \"../core/job\";\nimport type { ImageGenerateParams, ImageGenerationResult } from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport class ImagesResource extends BaseResource {\n /** Generate one or more images and wait for the result. */\n generate(\n params: ImageGenerateParams,\n poll?: PollOptions,\n ): Promise<ImageGenerationResult> {\n return this.runQueued<ImageGenerationResult>(\n \"/api/llm/generate-image\",\n params,\n \"image\",\n poll,\n );\n }\n\n /** Submit an image generation and return the `Job` handle. */\n generateJob(\n params: ImageGenerateParams,\n signal?: AbortSignal,\n ): Promise<Job<ImageGenerationResult>> {\n return this.submitQueued<ImageGenerationResult>(\n \"/api/llm/generate-image\",\n params,\n \"image\",\n signal,\n );\n }\n}\n","import { BaseResource } from \"./base\";\n\nexport interface KeyInfo {\n keyPrefix: string;\n name?: string;\n permissions: { read: boolean; write: boolean; admin?: boolean };\n rateLimits: { perMinute: number; perDay: number };\n expiresAt?: string;\n lastUsedAt?: string;\n createdAt?: string;\n}\n\nexport interface KeyValidation {\n success: boolean;\n valid: boolean;\n message?: string;\n data?: unknown;\n}\n\nexport class KeysResource extends BaseResource {\n /** Info about the key the client is authenticated with. */\n info(signal?: AbortSignal): Promise<KeyInfo> {\n return this.transport.json(\"GET\", \"/api/keys/info\", { signal });\n }\n\n /** Validate an API key. Returns `{ valid: false }` rather than throwing. */\n validate(apiKey: string, signal?: AbortSignal): Promise<KeyValidation> {\n return this.transport.json(\"POST\", \"/api/keys/validate\", {\n body: { apiKey },\n signal,\n unwrap: false,\n });\n }\n}\n","import { BaseResource } from \"./base\";\n\nexport interface PortalPeriod {\n year?: number;\n month?: number;\n}\n\nexport class PortalResource extends BaseResource {\n info(signal?: AbortSignal): Promise<Record<string, unknown>> {\n return this.transport.json(\"GET\", \"/api/portal/info\", { signal });\n }\n\n overview(\n period: PortalPeriod = {},\n signal?: AbortSignal,\n ): Promise<Record<string, unknown>> {\n return this.transport.json(\"GET\", \"/api/portal/overview\", {\n query: { year: period.year, month: period.month },\n signal,\n });\n }\n\n usageDaily(\n period: PortalPeriod = {},\n signal?: AbortSignal,\n ): Promise<unknown[]> {\n return this.transport.json(\"GET\", \"/api/portal/usage/daily\", {\n query: { year: period.year, month: period.month },\n signal,\n });\n }\n\n usageByModel(\n period: PortalPeriod = {},\n signal?: AbortSignal,\n ): Promise<unknown[]> {\n return this.transport.json(\"GET\", \"/api/portal/usage/by-model\", {\n query: { year: period.year, month: period.month },\n signal,\n });\n }\n\n /** Export a month of usage as CSV text. */\n exportUsage(\n params: { month: number; year: number },\n signal?: AbortSignal,\n ): Promise<string> {\n return this.transport.text(\"GET\", \"/api/portal/export/usage\", {\n query: { month: params.month, year: params.year },\n signal,\n });\n }\n}\n","import { BaseResource } from \"./base\";\n\n/** Unauthenticated endpoints. These work even without an API key. */\nexport class PublicResource extends BaseResource {\n /** All providers with their models and public pricing. */\n models(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/public/models\", { signal });\n }\n\n /** Available voices per provider. */\n voices(signal?: AbortSignal): Promise<Record<string, any>> {\n return this.transport.json(\"GET\", \"/api/public/voices\", { signal });\n }\n\n /** A short spoken preview of a voice (base64 audio). */\n voicePreview(\n params: { provider: string; voiceId: string },\n signal?: AbortSignal,\n ): Promise<{ audio: string; mimeType: string; voiceId: string }> {\n return this.transport.json(\"POST\", \"/api/public/voices/preview\", {\n body: params,\n signal,\n });\n }\n\n /** The raw OpenAPI specification (YAML). */\n openapi(signal?: AbortSignal): Promise<string> {\n return this.transport.text(\"GET\", \"/api/public/openapi.yaml\", { signal });\n }\n}\n","import { Job } from \"../core/job\";\nimport type { ChatStreamEvent } from \"../types/chat\";\nimport type { JobSnapshot, PollOptions, TaskKind } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\n/** Low-level access to the queue by `queueId`, for tasks tracked out of band. */\nexport class QueueResource extends BaseResource {\n /** Reconstruct a `Job` handle from a known queue id. */\n job<T = unknown>(queueId: string, taskKind: TaskKind = \"completion\"): Job<T> {\n return new Job<T>(queueId, this.transport, taskKind, this.defaultPoll);\n }\n\n status(\n queueId: string,\n opts?: { signal?: AbortSignal; allowMissing?: boolean },\n ): Promise<JobSnapshot> {\n return this.job(queueId).status(opts);\n }\n\n result<T = unknown>(queueId: string, opts?: PollOptions): Promise<T> {\n return this.job<T>(queueId).result(opts);\n }\n\n stream(\n queueId: string,\n opts?: { signal?: AbortSignal; includeRaw?: boolean; idleMs?: number },\n ): AsyncGenerator<ChatStreamEvent> {\n return this.job(queueId).stream(opts);\n }\n\n cancel(queueId: string, opts?: { signal?: AbortSignal }): Promise<void> {\n return this.job(queueId).cancel(opts);\n }\n}\n","import type { ConversationSession } from \"../types/conversations\";\nimport type {\n BrokeredCredential,\n CreateRealtimeSessionParams,\n FinalizeRealtimeParams,\n RealtimeSession,\n RealtimeSessionRecord,\n} from \"../types/realtime\";\nimport { BaseResource } from \"./base\";\n\nclass RealtimeSessionsAPI extends BaseResource {\n /** Mint an ephemeral realtime credential. The response is NOT enveloped. */\n create(\n params: CreateRealtimeSessionParams,\n signal?: AbortSignal,\n ): Promise<RealtimeSession> {\n return this.transport.json(\"POST\", \"/api/realtime/sessions\", {\n body: params,\n signal,\n retry: \"submit\",\n unwrap: false,\n });\n }\n\n async get(id: number, signal?: AbortSignal): Promise<RealtimeSessionRecord> {\n const data = await this.transport.json<{ session: RealtimeSessionRecord }>(\n \"GET\",\n `/api/realtime/sessions/${id}`,\n { signal },\n );\n return data.session;\n }\n\n async end(\n id: number,\n params: FinalizeRealtimeParams = {},\n signal?: AbortSignal,\n ): Promise<RealtimeSessionRecord> {\n const data = await this.transport.json<{ session: RealtimeSessionRecord }>(\n \"POST\",\n `/api/realtime/sessions/${id}/end`,\n { body: params, signal },\n );\n return data.session;\n }\n}\n\nexport class RealtimeResource extends BaseResource {\n readonly sessions = new RealtimeSessionsAPI(this.transport, this.defaultPoll);\n}\n\n/**\n * Normalize a realtime or conversational session into a single credential\n * shape safe to hand to a frontend (only the short-lived secret, never the\n * API key).\n */\nexport function toBrokeredCredential(\n session: RealtimeSession | ConversationSession,\n): BrokeredCredential {\n if (\"clientSecret\" in session) {\n return {\n kind: \"openai-realtime\",\n sessionId: session.sessionId,\n token: session.clientSecret,\n url: session.webrtcUrl,\n expiresAt: session.expiresAt,\n expiresInMs: Math.max(0, Date.parse(session.expiresAt) - Date.now()),\n };\n }\n const expiresInMs = session.expiresIn * 1000;\n return {\n kind: \"elevenlabs-convai\",\n sessionId: session.session.id,\n url: session.signedUrl,\n expiresAt: new Date(Date.now() + expiresInMs).toISOString(),\n expiresInMs,\n };\n}\n","import { BaseResource } from \"./base\";\n\nexport interface UsageSummary {\n totalRequests: number;\n totalTokens: number;\n totalPrice?: number;\n [k: string]: unknown;\n}\n\nexport class UsageResource extends BaseResource {\n /** Current-month usage summary. */\n current(signal?: AbortSignal): Promise<UsageSummary> {\n return this.transport.json(\"GET\", \"/api/llm/usage\", { signal });\n }\n /** Monthly usage broken down by model/provider. */\n monthly(signal?: AbortSignal): Promise<unknown> {\n return this.transport.json(\"GET\", \"/api/llm/usage/monthly\", { signal });\n }\n /** Daily usage breakdown. */\n daily(signal?: AbortSignal): Promise<unknown> {\n return this.transport.json(\"GET\", \"/api/llm/usage/daily\", { signal });\n }\n}\n","import type { Job } from \"../core/job\";\nimport type {\n VideoGenerateParams,\n VideoGenerationResult,\n VideoUploadResult,\n} from \"../types/media\";\nimport type { PollOptions } from \"../types/queue\";\nimport { BaseResource } from \"./base\";\n\nexport interface VideoUploadOptions {\n filename?: string;\n mimeType?: string;\n signal?: AbortSignal;\n}\n\nexport class VideoResource extends BaseResource {\n generate(\n params: VideoGenerateParams,\n poll?: PollOptions,\n ): Promise<VideoGenerationResult> {\n return this.runQueued<VideoGenerationResult>(\n \"/api/llm/generate-video\",\n params,\n \"video\",\n poll,\n );\n }\n\n generateJob(\n params: VideoGenerateParams,\n signal?: AbortSignal,\n ): Promise<Job<VideoGenerationResult>> {\n return this.submitQueued<VideoGenerationResult>(\n \"/api/llm/generate-video\",\n params,\n \"video\",\n signal,\n );\n }\n\n /** Upload a seed video for image/video-to-video; returns a `fileId`. */\n async upload(\n file: Blob | Uint8Array | ArrayBuffer,\n opts: VideoUploadOptions = {},\n ): Promise<VideoUploadResult> {\n const form = new FormData();\n const blob =\n file instanceof Blob\n ? file\n : new Blob([file as BlobPart], { type: opts.mimeType });\n form.append(\"video\", blob, opts.filename ?? \"video\");\n return this.transport.json<VideoUploadResult>(\n \"POST\",\n \"/api/llm/upload-video\",\n { body: form, signal: opts.signal, retry: \"submit\" },\n );\n }\n}\n","import type { Job } from \"../core/job\";\nimport type { PollOptions } from \"../types/queue\";\nimport type {\n AutoLabelParams,\n AutoLabelResult,\n AutoTrainParams,\n DetectParams,\n FaceDetectionResult,\n FaceDetectParams,\n ImageRecognitionResult,\n TrainParams,\n TrainingJob,\n VisionModel,\n WebDetectionResult,\n WebDetectParams,\n ZeroShotDetectParams,\n} from \"../types/vision\";\nimport { BaseResource } from \"./base\";\n\nexport class VisionResource extends BaseResource {\n detect(\n params: DetectParams,\n poll?: PollOptions,\n ): Promise<ImageRecognitionResult> {\n return this.runQueued(\"/api/vision/detect\", params, \"vision\", poll);\n }\n detectJob(\n params: DetectParams,\n signal?: AbortSignal,\n ): Promise<Job<ImageRecognitionResult>> {\n return this.submitQueued(\"/api/vision/detect\", params, \"vision\", signal);\n }\n\n zeroShot(\n params: ZeroShotDetectParams,\n poll?: PollOptions,\n ): Promise<ImageRecognitionResult> {\n return this.runQueued(\n \"/api/vision/detect/zero-shot\",\n params,\n \"vision\",\n poll,\n );\n }\n zeroShotJob(\n params: ZeroShotDetectParams,\n signal?: AbortSignal,\n ): Promise<Job<ImageRecognitionResult>> {\n return this.submitQueued(\n \"/api/vision/detect/zero-shot\",\n params,\n \"vision\",\n signal,\n );\n }\n\n faces(\n params: FaceDetectParams,\n poll?: PollOptions,\n ): Promise<FaceDetectionResult> {\n return this.runQueued(\"/api/vision/detect/faces\", params, \"vision\", poll);\n }\n facesJob(\n params: FaceDetectParams,\n signal?: AbortSignal,\n ): Promise<Job<FaceDetectionResult>> {\n return this.submitQueued(\n \"/api/vision/detect/faces\",\n params,\n \"vision\",\n signal,\n );\n }\n\n web(\n params: WebDetectParams,\n poll?: PollOptions,\n ): Promise<WebDetectionResult> {\n return this.runQueued(\"/api/vision/detect/web\", params, \"vision\", poll);\n }\n webJob(\n params: WebDetectParams,\n signal?: AbortSignal,\n ): Promise<Job<WebDetectionResult>> {\n return this.submitQueued(\"/api/vision/detect/web\", params, \"vision\", signal);\n }\n\n autoLabel(\n params: AutoLabelParams,\n poll?: PollOptions,\n ): Promise<AutoLabelResult> {\n return this.runQueued(\"/api/vision/auto-label\", params, \"vision\", poll);\n }\n autoLabelJob(\n params: AutoLabelParams,\n signal?: AbortSignal,\n ): Promise<Job<AutoLabelResult>> {\n return this.submitQueued(\"/api/vision/auto-label\", params, \"vision\", signal);\n }\n\n autoTrain(\n params: AutoTrainParams,\n poll?: PollOptions,\n ): Promise<TrainingJob> {\n return this.runQueued(\"/api/vision/auto-train\", params, \"vision\", poll);\n }\n autoTrainJob(\n params: AutoTrainParams,\n signal?: AbortSignal,\n ): Promise<Job<TrainingJob>> {\n return this.submitQueued(\"/api/vision/auto-train\", params, \"vision\", signal);\n }\n\n /** Start a dataset training run (synchronous; returns a job record). */\n train(params: TrainParams, signal?: AbortSignal): Promise<TrainingJob> {\n return this.transport.json<TrainingJob>(\"POST\", \"/api/vision/train\", {\n body: params,\n signal,\n retry: \"submit\",\n });\n }\n getTraining(jobId: string, signal?: AbortSignal): Promise<TrainingJob> {\n return this.transport.json<TrainingJob>(\n \"GET\",\n `/api/vision/train/${encodeURIComponent(jobId)}`,\n { signal },\n );\n }\n listTraining(signal?: AbortSignal): Promise<TrainingJob[]> {\n return this.transport.json<TrainingJob[]>(\"GET\", \"/api/vision/train\", {\n signal,\n });\n }\n\n models(signal?: AbortSignal): Promise<VisionModel[]> {\n return this.transport.json<VisionModel[]>(\"GET\", \"/api/vision/models\", {\n signal,\n });\n }\n deleteModel(\n modelId: string,\n signal?: AbortSignal,\n ): Promise<{ deleted: boolean; modelId: string }> {\n return this.transport.json(\n \"DELETE\",\n `/api/vision/models/${encodeURIComponent(modelId)}`,\n { signal },\n );\n }\n}\n","import type { Job } from \"../core/job\";\nimport type { PollOptions } from \"../types/queue\";\nimport type {\n OcrLanguages,\n OcrRecognizeParams,\n OcrResult,\n RedactParams,\n RedactResult,\n} from \"../types/ocr\";\nimport { BaseResource } from \"./base\";\n\nexport class OcrResource extends BaseResource {\n recognize(params: OcrRecognizeParams, poll?: PollOptions): Promise<OcrResult> {\n return this.runQueued(\"/api/ocr/recognize\", params, \"vision\", poll);\n }\n recognizeJob(\n params: OcrRecognizeParams,\n signal?: AbortSignal,\n ): Promise<Job<OcrResult>> {\n return this.submitQueued(\"/api/ocr/recognize\", params, \"vision\", signal);\n }\n\n redact(params: RedactParams, poll?: PollOptions): Promise<RedactResult> {\n return this.runQueued(\"/api/ocr/redact\", params, \"vision\", poll);\n }\n redactJob(\n params: RedactParams,\n signal?: AbortSignal,\n ): Promise<Job<RedactResult>> {\n return this.submitQueued(\"/api/ocr/redact\", params, \"vision\", signal);\n }\n\n async languages(signal?: AbortSignal): Promise<OcrLanguages> {\n return this.transport.json<OcrLanguages>(\"GET\", \"/api/ocr/languages\", {\n signal,\n });\n }\n}\n","import { anthropicTarget, type CompatTarget, openaiTarget } from \"./compat\";\nimport type { FetchLike } from \"./core/fetch\";\nimport { Transport } from \"./core/http\";\nimport { AgentsResource } from \"./resources/agents\";\nimport { AudioResource } from \"./resources/audio\";\nimport { ChatResource } from \"./resources/chat\";\nimport { ConversationsResource } from \"./resources/conversations\";\nimport { DiscoveryResource } from \"./resources/discovery\";\nimport { EmbeddingsResource } from \"./resources/embeddings\";\nimport { ImagesResource } from \"./resources/images\";\nimport { KeysResource } from \"./resources/keys\";\nimport { PortalResource } from \"./resources/portal\";\nimport { PublicResource } from \"./resources/public\";\nimport { QueueResource } from \"./resources/queue\";\nimport { RealtimeResource } from \"./resources/realtime\";\nimport { UsageResource } from \"./resources/usage\";\nimport { VideoResource } from \"./resources/video\";\nimport { VisionResource } from \"./resources/vision\";\nimport { OcrResource } from \"./resources/ocr\";\nimport type { PollOptions } from \"./types/queue\";\n\nexport interface CanaryCodersAIOptions {\n /** API key. Defaults to `process.env.CANARY_AI_API_KEY` (legacy `CANARYLLM_API_KEY` still read). */\n apiKey?: string;\n /** Base URL. Defaults to `https://api.ai.canarycoders.es`. */\n baseURL?: string;\n /** Send the key as `Authorization: Bearer` (default) or `X-API-Key`. */\n authStyle?: \"bearer\" | \"x-api-key\";\n /** Per-request total timeout in ms (default 60000). */\n timeoutMs?: number;\n /** Automatic retries for transient failures (default 2). */\n maxRetries?: number;\n /** Override the fetch implementation (tests, proxies, custom agents). */\n fetch?: FetchLike;\n defaultHeaders?: Record<string, string>;\n /** Default `tag` attached to requests for usage attribution. */\n defaultTag?: string;\n /** Default polling behavior for queued operations. */\n poll?: PollOptions;\n}\n\nconst DEFAULT_BASE_URL = \"https://api.ai.canarycoders.es\";\n\nfunction readEnv(key: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) return process.env[key];\n return undefined;\n}\n\nexport class CanaryCodersAI {\n readonly chat: ChatResource;\n readonly queue: QueueResource;\n readonly images: ImagesResource;\n readonly video: VideoResource;\n readonly audio: AudioResource;\n readonly embeddings: EmbeddingsResource;\n readonly vision: VisionResource;\n readonly ocr: OcrResource;\n readonly conversations: ConversationsResource;\n readonly agents: AgentsResource;\n readonly realtime: RealtimeResource;\n readonly discovery: DiscoveryResource;\n readonly usage: UsageResource;\n readonly portal: PortalResource;\n readonly keys: KeysResource;\n readonly public: PublicResource;\n\n private readonly transport: Transport;\n private readonly baseURL: string;\n private readonly apiKey?: string;\n\n constructor(options: CanaryCodersAIOptions = {}) {\n this.apiKey =\n options.apiKey ?? readEnv(\"CANARY_AI_API_KEY\") ?? readEnv(\"CANARYLLM_API_KEY\");\n this.baseURL =\n options.baseURL ??\n readEnv(\"CANARY_AI_BASE_URL\") ??\n readEnv(\"CANARYLLM_BASE_URL\") ??\n DEFAULT_BASE_URL;\n\n this.transport = new Transport({\n apiKey: this.apiKey,\n baseURL: this.baseURL,\n authStyle: options.authStyle ?? \"bearer\",\n timeoutMs: options.timeoutMs ?? 60_000,\n maxRetries: options.maxRetries ?? 2,\n fetch: options.fetch,\n defaultHeaders: options.defaultHeaders,\n defaultTag: options.defaultTag,\n });\n\n const poll = options.poll;\n this.chat = new ChatResource(this.transport, poll);\n this.queue = new QueueResource(this.transport, poll);\n this.images = new ImagesResource(this.transport, poll);\n this.video = new VideoResource(this.transport, poll);\n this.audio = new AudioResource(this.transport, poll);\n this.embeddings = new EmbeddingsResource(this.transport, poll);\n this.vision = new VisionResource(this.transport, poll);\n this.ocr = new OcrResource(this.transport, poll);\n this.conversations = new ConversationsResource(this.transport, poll);\n this.agents = new AgentsResource(this.transport, poll);\n this.realtime = new RealtimeResource(this.transport, poll);\n this.discovery = new DiscoveryResource(this.transport, poll);\n this.usage = new UsageResource(this.transport, poll);\n this.portal = new PortalResource(this.transport, poll);\n this.keys = new KeysResource(this.transport, poll);\n this.public = new PublicResource(this.transport, poll);\n }\n\n /** Targets to plug into the official `openai` / `@anthropic-ai/sdk` clients. */\n get compat(): {\n openai: () => CompatTarget;\n anthropic: () => CompatTarget;\n } {\n return {\n openai: () => openaiTarget(this.baseURL, this.apiKey ?? \"\"),\n anthropic: () => anthropicTarget(this.baseURL, this.apiKey ?? \"\"),\n };\n }\n}\n","import { CanaryCodersAI } from \"./client\";\n\nexport { CanaryCodersAI };\nexport default CanaryCodersAI;\nexport type { CanaryCodersAIOptions } from \"./client\";\n\n/** @deprecated Renamed to `CanaryCodersAI`. Kept as an alias for backwards compatibility. */\nexport { CanaryCodersAI as CanaryLLM };\n/** @deprecated Renamed to `CanaryCodersAIOptions`. */\nexport type { CanaryCodersAIOptions as CanaryLLMOptions } from \"./client\";\n\n// Errors\nexport {\n APIError,\n APIConnectionError,\n APIConnectionTimeoutError,\n AuthenticationError,\n BadRequestError,\n ConflictError,\n InternalServerError,\n NotFoundError,\n PermissionError,\n RateLimitError,\n UnprocessableEntityError,\n} from \"./core/errors\";\n\n// Queue handle\nexport { Job } from \"./core/job\";\nexport type { JobStreamOptions } from \"./core/job\";\n\n// Streaming\nexport type {\n StreamAdapterOptions,\n StreamProtocol,\n} from \"./core/stream-adapters\";\n\n// Broker helper\nexport { toBrokeredCredential } from \"./resources/realtime\";\n\n// Compat helpers\nexport { anthropicTarget, openaiTarget, type CompatTarget } from \"./compat\";\n\n// Resource option/result types\nexport type { ChatStreamOptions } from \"./resources/chat\";\nexport type { KeyInfo, KeyValidation } from \"./resources/keys\";\nexport type { PortalPeriod } from \"./resources/portal\";\nexport type { UsageSummary } from \"./resources/usage\";\nexport type { VideoUploadOptions } from \"./resources/video\";\n\n// All wire types\nexport * from \"./types\";\n"]}