@better-agent/providers 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/anthropic/index.d.mts +1196 -0
- package/dist/anthropic/index.d.mts.map +1 -0
- package/dist/anthropic/index.mjs +1909 -0
- package/dist/anthropic/index.mjs.map +1 -0
- package/dist/fetch-CW0dWlVC.mjs +84 -0
- package/dist/fetch-CW0dWlVC.mjs.map +1 -0
- package/dist/openai/index.d.mts +1629 -0
- package/dist/openai/index.d.mts.map +1 -0
- package/dist/openai/index.mjs +6690 -0
- package/dist/openai/index.mjs.map +1 -0
- package/dist/xai/index.d.mts +382 -0
- package/dist/xai/index.d.mts.map +1 -0
- package/dist/xai/index.mjs +1277 -0
- package/dist/xai/index.mjs.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["createXAIHttpClient"],"sources":["../../src/xai/client/auth.ts","../../src/xai/client/errors.ts","../../src/xai/client/stream.ts","../../src/xai/client/create-client.ts","../../src/xai/images/mappers.ts","../../src/xai/images/model.ts","../../src/xai/tools/index.ts","../../src/xai/responses/mappers.ts","../../src/xai/responses/model.ts","../../src/xai/shared/schemas.ts","../../src/xai/models/index.ts","../../src/xai/provider.ts"],"sourcesContent":["import type { XAIConfig } from \"../types\";\n\nexport const buildXAIHeaders = (config: XAIConfig): Record<string, string> => {\n const headers: Record<string, string> = {\n ...(config.headers ?? {}),\n };\n\n if (config.apiKey) headers.Authorization = `Bearer ${config.apiKey}`;\n\n return headers;\n};\n","import { BetterAgentError } from \"@better-agent/shared/errors\";\n\nimport type { XAIError } from \"../types\";\n\nexport type XAIHttpError = {\n status: number;\n statusText: string;\n error?: XAIError[\"error\"];\n};\n\nexport const mapXAIHttpError = (\n httpError: XAIHttpError | undefined,\n ctx: {\n at: string;\n path: string;\n },\n): BetterAgentError => {\n if (!httpError) {\n return BetterAgentError.fromCode(\"UPSTREAM_FAILED\", \"xAI request failed\", {\n context: {\n provider: \"xai\",\n },\n }).at({\n at: ctx.at,\n data: {\n path: ctx.path,\n },\n });\n }\n\n const { status, statusText, error } = httpError;\n const message = error?.message ?? statusText ?? \"xAI request failed\";\n const code = String(error?.code ?? error?.type ?? status);\n\n return BetterAgentError.fromCode(\"UPSTREAM_FAILED\", message, {\n status,\n context: {\n provider: \"xai\",\n upstreamCode: code,\n raw: error,\n },\n }).at({\n at: ctx.at,\n data: {\n path: ctx.path,\n status,\n },\n });\n};\n","export const unwrapXAIStreamJson = (parsed: unknown): unknown => {\n if (!parsed || typeof parsed !== \"object\") return parsed;\n const obj = parsed;\n\n if (\"data\" in obj) return obj.data;\n if (\"value\" in obj) return obj.value;\n return obj;\n};\n","import { BetterAgentError } from \"@better-agent/shared/errors\";\nimport { type Result, err, ok } from \"@better-agent/shared/neverthrow\";\nimport { safeJsonParse } from \"@better-agent/shared/utils\";\nimport { baFetch } from \"../../utils/fetch\";\nimport type {\n XAICreateImageSchema as XAICreateImageRequestSchema,\n XAICreateImageResponse,\n XAIEditImageSchema as XAIEditImageRequestSchema,\n} from \"../images/schemas\";\nimport type { XAICreateResponse, XAICreateResponseSchema } from \"../responses/schemas\";\nimport type {\n XAIDeleteFileResponseSchema,\n XAIFileListSchema,\n XAIFileObjectSchema,\n} from \"../shared/schemas\";\nimport type { XAIResponseStreamEvent } from \"../shared/schemas\";\nimport type { XAIConfig, XAIError, XAIFileUploadRequest } from \"../types\";\nimport { buildXAIHeaders } from \"./auth\";\nimport { mapXAIHttpError } from \"./errors\";\nimport { unwrapXAIStreamJson } from \"./stream\";\n\ntype RequestOptions = {\n signal?: AbortSignal | null;\n};\n\nexport const createXAIClient = (config: XAIConfig = {}) => {\n const baseUrl = (config.baseURL ?? \"https://api.x.ai\").replace(/\\/+$/, \"\");\n const headers = buildXAIHeaders(config);\n\n const post = async <TOutput>(\n path: string,\n body: unknown,\n at: string,\n options?: RequestOptions,\n ): Promise<Result<TOutput, BetterAgentError>> => {\n try {\n const result = await baFetch<TOutput, XAIError>(`${baseUrl}${path}`, {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n ...headers,\n \"Content-Type\": \"application/json\",\n },\n signal: options?.signal ?? null,\n throw: false,\n });\n\n if (result.error) {\n return err(\n mapXAIHttpError(result.error, {\n at,\n path,\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n if (!result.data) {\n return err(\n BetterAgentError.fromCode(\"UPSTREAM_FAILED\", \"xAI returned no data\", {\n context: {\n provider: \"xai\",\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n return ok(result.data);\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"xAI request failed\",\n opts: {\n code: \"UPSTREAM_FAILED\",\n context: {\n provider: \"xai\",\n },\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n };\n\n const get = async <TOutput>(\n path: string,\n at: string,\n options?: RequestOptions,\n ): Promise<Result<TOutput, BetterAgentError>> => {\n try {\n const result = await baFetch<TOutput, XAIError>(`${baseUrl}${path}`, {\n method: \"GET\",\n headers,\n signal: options?.signal ?? null,\n throw: false,\n });\n\n if (result.error) {\n return err(\n mapXAIHttpError(result.error, {\n at,\n path,\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n if (!result.data) {\n return err(\n BetterAgentError.fromCode(\"UPSTREAM_FAILED\", \"xAI returned no data\", {\n context: {\n provider: \"xai\",\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n return ok(result.data);\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"xAI request failed\",\n opts: {\n code: \"UPSTREAM_FAILED\",\n context: {\n provider: \"xai\",\n },\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n };\n\n const del = async <TOutput>(\n path: string,\n at: string,\n options?: RequestOptions,\n ): Promise<Result<TOutput, BetterAgentError>> => {\n try {\n const result = await baFetch<TOutput, XAIError>(`${baseUrl}${path}`, {\n method: \"DELETE\",\n headers,\n signal: options?.signal ?? null,\n throw: false,\n });\n\n if (result.error) {\n return err(\n mapXAIHttpError(result.error, {\n at,\n path,\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n if (!result.data) {\n return err(\n BetterAgentError.fromCode(\"UPSTREAM_FAILED\", \"xAI returned no data\", {\n context: {\n provider: \"xai\",\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n return ok(result.data);\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"xAI request failed\",\n opts: {\n code: \"UPSTREAM_FAILED\",\n context: {\n provider: \"xai\",\n },\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n };\n\n const uploadFile = async (\n path: string,\n body: XAIFileUploadRequest,\n at: string,\n options?: RequestOptions,\n ): Promise<Result<XAIFileObjectSchema, BetterAgentError>> => {\n const formData = new FormData();\n\n try {\n const filename =\n body.filename ??\n (typeof File !== \"undefined\" && body.file instanceof File\n ? body.file.name\n : \"file\");\n const blob =\n body.file instanceof Blob\n ? body.file\n : new Blob([new Uint8Array(body.file)], {\n type: body.mimeType ?? \"application/octet-stream\",\n });\n\n formData.append(\"purpose\", body.purpose ?? \"assistants\");\n formData.append(\"file\", blob, filename);\n const response = await fetch(`${baseUrl}${path}`, {\n method: \"POST\",\n body: formData,\n headers,\n signal: options?.signal ?? null,\n });\n\n if (!response.ok) {\n let xaiError: XAIError | undefined;\n try {\n xaiError = (await response.json()) as XAIError;\n } catch {\n // ignore parse failure\n }\n\n return err(\n mapXAIHttpError(\n {\n status: response.status,\n statusText: response.statusText,\n error: xaiError?.error,\n },\n { at, path },\n ),\n );\n }\n\n const data = (await response.json()) as XAIFileObjectSchema | null;\n if (!data) {\n return err(\n BetterAgentError.fromCode(\"UPSTREAM_FAILED\", \"xAI returned no data\", {\n context: {\n provider: \"xai\",\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n return ok(data);\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"xAI file upload failed\",\n opts: {\n code: \"UPSTREAM_FAILED\",\n context: {\n provider: \"xai\",\n },\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n };\n\n const getBinary = async (\n path: string,\n at: string,\n options?: RequestOptions,\n ): Promise<Result<Uint8Array, BetterAgentError>> => {\n let response: Response;\n\n try {\n response = await fetch(`${baseUrl}${path}`, {\n method: \"GET\",\n headers,\n signal: options?.signal ?? null,\n });\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"xAI request failed\",\n opts: {\n code: \"UPSTREAM_FAILED\",\n context: {\n provider: \"xai\",\n },\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n if (!response.ok) {\n let xaiError: XAIError | undefined;\n try {\n xaiError = (await response.json()) as XAIError;\n } catch {\n // ignore parse failure\n }\n\n return err(\n mapXAIHttpError(\n {\n status: response.status,\n statusText: response.statusText,\n error: xaiError?.error,\n },\n { at, path },\n ),\n );\n }\n\n return ok(new Uint8Array(await response.arrayBuffer()));\n };\n\n const streamSSE = async (\n path: string,\n body: unknown,\n at: string,\n options?: RequestOptions,\n ): Promise<\n Result<AsyncGenerator<Result<XAIResponseStreamEvent, BetterAgentError>>, BetterAgentError>\n > => {\n let response: Response;\n\n try {\n response = await fetch(`${baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n ...headers,\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n signal: options?.signal ?? null,\n });\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"xAI stream request failed\",\n opts: {\n code: \"UPSTREAM_FAILED\",\n context: {\n provider: \"xai\",\n },\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n }\n\n if (!response.ok || !response.body) {\n let xaiError: XAIError | undefined;\n try {\n xaiError = (await response.json()) as XAIError;\n } catch {\n // ignore parse failure\n }\n\n return err(\n mapXAIHttpError(\n {\n status: response.status,\n statusText: response.statusText,\n error: xaiError?.error,\n },\n { at, path },\n ),\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n const events = (async function* (): AsyncGenerator<\n Result<XAIResponseStreamEvent, BetterAgentError>\n > {\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const chunks = buffer.split(\"\\n\\n\");\n buffer = chunks.pop() ?? \"\";\n\n for (const chunk of chunks) {\n const lines = chunk\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n const dataLines = lines\n .filter((line) => line.startsWith(\"data:\"))\n .map((line) => line.slice(5).trim());\n\n for (const data of dataLines) {\n if (!data || data === \"[DONE]\") continue;\n\n const parsed = safeJsonParse(String(unwrapXAIStreamJson(data)));\n if (\n parsed.isErr() ||\n !parsed.value ||\n typeof parsed.value !== \"object\"\n ) {\n yield err(\n BetterAgentError.fromCode(\n \"UPSTREAM_FAILED\",\n \"xAI returned an invalid stream event\",\n {\n context: { provider: \"xai\", raw: data },\n },\n ).at({\n at,\n data: {\n path,\n },\n }),\n );\n return;\n }\n\n yield ok(parsed.value as XAIResponseStreamEvent);\n }\n }\n }\n } catch (e) {\n yield err(\n BetterAgentError.wrap({\n err: e,\n message: \"xAI stream read failed\",\n opts: {\n code: \"UPSTREAM_FAILED\",\n context: {\n provider: \"xai\",\n },\n },\n }).at({\n at,\n data: {\n path,\n },\n }),\n );\n } finally {\n reader.releaseLock();\n }\n })();\n\n return ok(events);\n };\n\n return {\n responses: {\n create: (\n body: XAICreateResponseSchema,\n options?: RequestOptions,\n ): Promise<Result<XAICreateResponse, BetterAgentError>> =>\n post(\"/v1/responses\", body, \"xai.http.responses.create\", options),\n stream: (body: XAICreateResponseSchema, options?: RequestOptions) =>\n streamSSE(\n \"/v1/responses\",\n {\n ...body,\n stream: true,\n },\n \"xai.http.responses.stream\",\n options,\n ),\n },\n images: {\n create: (\n body: XAICreateImageRequestSchema,\n options?: RequestOptions,\n ): Promise<Result<XAICreateImageResponse, BetterAgentError>> =>\n post(\"/v1/images/generations\", body, \"xai.http.images.create\", options),\n edit: (\n body: XAIEditImageRequestSchema,\n options?: RequestOptions,\n ): Promise<Result<XAICreateImageResponse, BetterAgentError>> =>\n post(\"/v1/images/edits\", body, \"xai.http.images.edit\", options),\n },\n files: {\n upload: (body: XAIFileUploadRequest, options?: RequestOptions) =>\n uploadFile(\"/v1/files\", body, \"xai.http.files.upload\", options),\n list: (\n options?: RequestOptions,\n ): Promise<Result<XAIFileListSchema, BetterAgentError>> =>\n get(\"/v1/files\", \"xai.http.files.list\", options),\n retrieve: (\n fileId: string,\n options?: RequestOptions,\n ): Promise<Result<XAIFileObjectSchema, BetterAgentError>> =>\n get(`/v1/files/${encodeURIComponent(fileId)}`, \"xai.http.files.retrieve\", options),\n delete: (\n fileId: string,\n options?: RequestOptions,\n ): Promise<Result<XAIDeleteFileResponseSchema, BetterAgentError>> =>\n del(`/v1/files/${encodeURIComponent(fileId)}`, \"xai.http.files.delete\", options),\n content: (fileId: string, options?: RequestOptions) =>\n getBinary(\n `/v1/files/${encodeURIComponent(fileId)}/content`,\n \"xai.http.files.content\",\n options,\n ),\n },\n };\n};\n","import type {\n GenerativeModelCallOptions,\n GenerativeModelImageSource,\n GenerativeModelResponse,\n} from \"@better-agent/core/providers\";\nimport { BetterAgentError } from \"@better-agent/shared/errors\";\nimport type { Result } from \"@better-agent/shared/neverthrow\";\nimport { err, ok } from \"@better-agent/shared/neverthrow\";\nimport { extractPassthroughOptions, omitNullish } from \"../../utils/object-utils\";\n\nimport type { XAICreateImageResponse, XAICreateImageSchema, XAIEditImageSchema } from \"./schemas\";\nimport type { XAIImageCaps, XAIImageEndpointOptions, XAIImageModelId } from \"./types\";\n\n/**\n * Keys explicitly handled by the xAI images mapper.\n * Everything else on the options object is passed through to the API body.\n */\nconst XAI_IMAGE_KNOWN_KEYS: ReadonlySet<string> = new Set([\n // Framework-managed\n \"input\",\n \"tools\",\n \"toolChoice\",\n \"modalities\",\n \"structured_output\",\n // Explicitly mapped\n \"n\",\n \"quality\",\n \"response_format\",\n \"size\",\n \"style\",\n \"aspect_ratio\",\n \"resolution\",\n \"user\",\n]);\n\ntype XAIImagesRequestPayload =\n | { mode: \"generate\"; body: XAICreateImageSchema }\n | { mode: \"edit\"; body: XAIEditImageSchema };\n\nconst toImageDataUrl = (source: GenerativeModelImageSource): string =>\n source.kind === \"url\" ? source.url : `data:${source.mimeType};base64,${source.data}`;\n\nconst parseXAIImagePromptInput = (args: {\n modelId: XAIImageModelId;\n options: GenerativeModelCallOptions<XAIImageCaps, XAIImageEndpointOptions>;\n}) => {\n const input = args.options.input;\n if (Array.isArray(input) && input.length > 1) {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"Image generation supports a single input item\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.images.map.inputLimit\" });\n }\n const first = Array.isArray(input) ? input[0] : input;\n if (typeof first === \"string\")\n return { prompt: first, images: [] as GenerativeModelImageSource[] };\n if (!first || typeof first !== \"object\" || !(\"type\" in first) || first.type !== \"message\") {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"xAI image generation requires a prompt string or a single message input.\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.images.map.inputShape\" });\n }\n if (typeof first.content === \"string\") {\n return { prompt: first.content, images: [] as GenerativeModelImageSource[] };\n }\n const promptParts: string[] = [];\n const images: GenerativeModelImageSource[] = [];\n for (const part of first.content) {\n if (part.type === \"text\") {\n promptParts.push(part.text);\n continue;\n }\n if (part.type === \"image\") {\n images.push(part.source);\n continue;\n }\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"xAI image generation only supports text and image input parts.\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.images.map.partType\" });\n }\n return { prompt: promptParts.join(\"\\n\"), images };\n};\n\nexport function mapToXAIImagesRequest<M extends XAIImageModelId>(args: {\n modelId: M;\n options: GenerativeModelCallOptions<XAIImageCaps, XAIImageEndpointOptions>;\n}): Result<XAIImagesRequestPayload, BetterAgentError> {\n try {\n const o = args.options;\n if (\"stream\" in (o as Record<string, unknown>) && (o as Record<string, unknown>).stream) {\n return err(\n BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"Image streaming is not supported by the xAI provider.\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.images.map.streamUnsupported\" }),\n );\n }\n const parsed = parseXAIImagePromptInput(args);\n const prompt = parsed.prompt;\n if (!prompt || prompt.trim().length === 0) {\n return err(\n BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"xAI image generation requires a text prompt.\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.images.map.prompt\" }),\n );\n }\n\n const imageOptions = o as {\n n?: XAICreateImageSchema[\"n\"];\n quality?: XAICreateImageSchema[\"quality\"];\n response_format?: XAICreateImageSchema[\"response_format\"];\n size?: XAICreateImageSchema[\"size\"];\n style?: XAICreateImageSchema[\"style\"];\n aspect_ratio?: XAIEditImageSchema[\"aspect_ratio\"];\n resolution?: XAIEditImageSchema[\"resolution\"];\n user?: XAICreateImageSchema[\"user\"];\n };\n\n if (parsed.images.length === 0) {\n const request: XAICreateImageSchema = {\n ...extractPassthroughOptions(\n imageOptions as Record<string, unknown>,\n XAI_IMAGE_KNOWN_KEYS,\n ),\n model: args.modelId as XAICreateImageSchema[\"model\"],\n prompt,\n ...omitNullish({\n n: imageOptions.n,\n quality: imageOptions.quality,\n response_format: imageOptions.response_format,\n size: imageOptions.size,\n style: imageOptions.style,\n user: imageOptions.user,\n }),\n };\n return ok({ mode: \"generate\", body: request });\n }\n\n const firstImage = parsed.images[0];\n if (!firstImage) {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"xAI image generation requires at least one image when editing\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.images.map.firstImageMissing\" });\n }\n const editRequest: XAIEditImageSchema = {\n ...extractPassthroughOptions(\n imageOptions as Record<string, unknown>,\n XAI_IMAGE_KNOWN_KEYS,\n ),\n model: args.modelId as XAIEditImageSchema[\"model\"],\n prompt,\n ...(parsed.images.length === 1\n ? {\n image: {\n type: \"image_url\",\n image_url: toImageDataUrl(firstImage),\n },\n }\n : {\n images: parsed.images.map((image) => ({\n type: \"image_url\" as const,\n image_url: toImageDataUrl(image),\n })),\n }),\n ...omitNullish({\n n: imageOptions.n,\n quality: imageOptions.quality,\n response_format: imageOptions.response_format,\n size: imageOptions.size,\n style: imageOptions.style,\n aspect_ratio: imageOptions.aspect_ratio,\n resolution: imageOptions.resolution,\n user: imageOptions.user,\n }),\n };\n return ok({ mode: \"edit\", body: editRequest });\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"Failed to map xAI image request\",\n opts: { code: \"INTERNAL\", context: { provider: \"xai\", model: args.modelId } },\n }).at({ at: \"xai.images.mapToRequest\" }),\n );\n }\n}\n\nexport function mapFromXAIImagesResponse(raw: XAICreateImageResponse): GenerativeModelResponse {\n const output = (raw.data ?? []).map(outputMapper).filter(isDefined);\n const usage =\n typeof raw.usage?.cost_in_usd_ticks === \"number\"\n ? { totalTokens: raw.usage.cost_in_usd_ticks }\n : {};\n const images = (raw.data ?? []).map((item) => ({\n ...omitNullish({\n url: typeof item.url === \"string\" ? item.url : undefined,\n b64_json: typeof item.b64_json === \"string\" ? item.b64_json : undefined,\n mime_type: typeof item.mime_type === \"string\" ? item.mime_type : undefined,\n revised_prompt:\n typeof item.revised_prompt === \"string\" ? item.revised_prompt : undefined,\n }),\n }));\n return {\n output,\n finishReason: \"stop\",\n usage,\n response: { body: { ...raw, normalized: { images, usage: raw.usage } } },\n };\n}\n\nfunction outputMapper(item: unknown) {\n if (!item || typeof item !== \"object\") return null;\n const image = item as {\n url?: unknown;\n b64_json?: unknown;\n mime_type?: unknown;\n revised_prompt?: unknown;\n };\n const url = typeof image.url === \"string\" ? image.url : null;\n const b64 = typeof image.b64_json === \"string\" ? image.b64_json : null;\n const mimeType = typeof image.mime_type === \"string\" ? image.mime_type : undefined;\n const revisedPrompt =\n typeof image.revised_prompt === \"string\" ? image.revised_prompt : undefined;\n if (!url && !b64) return null;\n if (b64) {\n return {\n type: \"message\" as const,\n role: \"assistant\" as const,\n content: [\n {\n type: \"image\" as const,\n source: {\n kind: \"base64\" as const,\n data: b64,\n mimeType: mimeType ?? \"image/png\",\n },\n ...(revisedPrompt ? { revisedPrompt } : {}),\n },\n ],\n };\n }\n if (url == null) return null;\n return {\n type: \"message\" as const,\n role: \"assistant\" as const,\n content: [\n {\n type: \"image\" as const,\n source: { kind: \"url\" as const, url },\n ...(mimeType ? { mimeType } : {}),\n ...(revisedPrompt ? { revisedPrompt } : {}),\n },\n ],\n };\n}\n\nfunction isDefined<T>(value: T | null): value is T {\n return value !== null;\n}\n","import type {\n GenerativeModelCallOptions,\n GenerativeModelGenerateResult,\n GenerativeModelResponse,\n} from \"@better-agent/core/providers\";\nimport { err, ok } from \"@better-agent/shared/neverthrow\";\n\nimport type { createXAIClient } from \"../client/create-client\";\nimport { mapFromXAIImagesResponse, mapToXAIImagesRequest } from \"./mappers\";\nimport type {\n XAIImageCaps,\n XAIImageEndpointOptions,\n XAIImageGenerativeModel,\n XAIImageModelId,\n} from \"./types\";\n\nexport const XAI_IMAGE_CAPS = {\n inputModalities: { text: true, image: true },\n inputShape: \"prompt\",\n replayMode: \"single_turn_persistent\",\n supportsInstruction: false,\n outputModalities: {\n image: true,\n },\n additionalSupportedRoles: [\"developer\"],\n} as const satisfies XAIImageCaps;\n\nexport const createXAIImagesModel = <M extends XAIImageModelId>(\n modelId: M,\n client: ReturnType<typeof createXAIClient>,\n): XAIImageGenerativeModel<M> => {\n const doGenerate: NonNullable<XAIImageGenerativeModel<M>[\"doGenerate\"]> = async (\n options,\n ctx,\n ) => {\n const requestBodyResult = mapToXAIImagesRequest({\n modelId,\n options: options as GenerativeModelCallOptions<XAIImageCaps, XAIImageEndpointOptions>,\n });\n if (requestBodyResult.isErr()) {\n return err(requestBodyResult.error.at({ at: \"xai.images.generate.mapRequest\" }));\n }\n\n const request = requestBodyResult.value;\n const raw =\n request.mode === \"edit\"\n ? await client.images.edit(request.body, {\n signal: ctx.signal ?? null,\n })\n : await client.images.create(request.body, {\n signal: ctx.signal ?? null,\n });\n if (raw.isErr()) {\n return err(raw.error.at({ at: \"xai.images.generate.http\" }));\n }\n\n const response = mapFromXAIImagesResponse(raw.value);\n return ok({\n response: {\n ...response,\n request: {\n body: request.body,\n },\n } satisfies GenerativeModelResponse,\n } satisfies GenerativeModelGenerateResult<XAIImageCaps>);\n };\n\n return {\n providerId: \"xai\",\n modelId,\n caps: XAI_IMAGE_CAPS,\n doGenerate,\n };\n};\n","import type { HostedToolDefinition } from \"@better-agent/core\";\nimport type { XAICreateResponseSchema } from \"../responses/schemas\";\n\ntype XAINativeToolByType<TType extends string> = NonNullable<\n XAICreateResponseSchema[\"tools\"]\n>[number] extends infer TTool\n ? TTool extends { type: infer ToolType extends string }\n ? TType extends ToolType\n ? TTool\n : never\n : never\n : never;\n\nexport type XAINativeToolConfig<TType extends string> = [XAINativeToolByType<TType>] extends [never]\n ? Record<string, unknown>\n : Omit<XAINativeToolByType<TType>, \"type\">;\n\nexport type XAINativeToolType =\n | \"web_search\"\n | \"x_search\"\n | \"code_execution\"\n | \"code_interpreter\"\n | \"attachment_search\"\n | \"collections_search\"\n | \"file_search\"\n | \"mcp\";\n\nexport type XAINativeToolDefinition<TType extends XAINativeToolType = XAINativeToolType> =\n HostedToolDefinition<\"xai\", TType, XAINativeToolConfig<TType>>;\n\nexport type XAINativeToolBuilders = ReturnType<typeof createXAINativeToolBuilders>;\ntype AnyXAINativeToolDefinition = {\n [K in XAINativeToolType]: XAINativeToolDefinition<K>;\n}[XAINativeToolType];\n\nexport function createXAINativeToolBuilders() {\n return {\n webSearch: (config: XAINativeToolConfig<\"web_search\"> = {}) =>\n createNativeTool(\"web_search\", config),\n xSearch: (config: XAINativeToolConfig<\"x_search\"> = {}) =>\n createNativeTool(\"x_search\", config),\n codeExecution: (config: XAINativeToolConfig<\"code_execution\"> = {}) =>\n createNativeTool(\"code_execution\", config),\n codeInterpreter: (config: XAINativeToolConfig<\"code_interpreter\"> = {}) =>\n createNativeTool(\"code_interpreter\", config),\n attachmentSearch: (config: XAINativeToolConfig<\"attachment_search\"> = {}) =>\n createNativeTool(\"attachment_search\", config),\n collectionsSearch: (config: XAINativeToolConfig<\"collections_search\"> = {}) =>\n createNativeTool(\"collections_search\", config),\n fileSearch: (config: XAINativeToolConfig<\"file_search\"> = {}) =>\n createNativeTool(\"file_search\", config),\n mcp: (config: XAINativeToolConfig<\"mcp\">) => createNativeTool(\"mcp\", config),\n };\n}\n\nfunction createNativeTool<TType extends XAINativeToolType>(\n type: TType,\n config: XAINativeToolConfig<TType>,\n): XAINativeToolDefinition<TType> {\n return {\n kind: \"hosted\",\n provider: \"xai\",\n type,\n config,\n };\n}\n\nexport function isXAINativeToolDefinition(tool: unknown): tool is AnyXAINativeToolDefinition {\n if (!tool || typeof tool !== \"object\") return false;\n const t = tool as Record<string, unknown>;\n return t.kind === \"hosted\" && t.provider === \"xai\" && typeof t.type === \"string\";\n}\n\nexport function mapXAINativeToolToRequest(\n tool: AnyXAINativeToolDefinition,\n): NonNullable<XAICreateResponseSchema[\"tools\"]>[number] {\n return {\n type: tool.type,\n ...tool.config,\n } as NonNullable<XAICreateResponseSchema[\"tools\"]>[number];\n}\n","import { TOOL_JSON_SCHEMA, isCallableToolDefinition } from \"@better-agent/core\";\nimport { Events } from \"@better-agent/core/events\";\nimport type { Event } from \"@better-agent/core/events\";\nimport type {\n GenerativeModelCallOptions,\n GenerativeModelFinishReason,\n GenerativeModelOutputItem,\n GenerativeModelOutputMessage,\n GenerativeModelOutputMessagePart,\n GenerativeModelProviderToolResult,\n GenerativeModelResponse,\n GenerativeModelUsage,\n ModalitiesParam,\n} from \"@better-agent/core/providers\";\nimport { BetterAgentError } from \"@better-agent/shared/errors\";\nimport type { Result } from \"@better-agent/shared/neverthrow\";\nimport { err, ok } from \"@better-agent/shared/neverthrow\";\nimport { extractPassthroughOptions, omitNullish } from \"../../utils/object-utils\";\n\nimport type { XAIResponseStreamEvent } from \"../shared/schemas\";\nimport { isXAINativeToolDefinition, mapXAINativeToolToRequest } from \"../tools\";\nimport type { XAICreateResponse, XAICreateResponseSchema } from \"./schemas\";\nimport type { XAIResponseCaps, XAIResponseEndpointOptions, XAIResponseModelId } from \"./types\";\n\n/**\n * Keys explicitly handled by the xAI responses mapper.\n */\nconst XAI_RESPONSE_KNOWN_KEYS: ReadonlySet<string> = new Set([\n // Framework-managed\n \"input\",\n \"tools\",\n \"toolChoice\",\n \"modalities\",\n \"structured_output\",\n // Explicitly mapped\n \"include\",\n \"instructions\",\n \"logprobs\",\n \"max_output_tokens\",\n \"metadata\",\n \"parallel_tool_calls\",\n \"previous_response_id\",\n \"reasoning\",\n \"search_parameters\",\n \"service_tier\",\n \"store\",\n \"temperature\",\n \"top_logprobs\",\n \"top_p\",\n \"user\",\n]);\n\nexport function mapToXAIResponsesRequest<\n M extends XAIResponseModelId,\n TModalities extends ModalitiesParam<XAIResponseCaps> = undefined,\n>(args: {\n modelId: M;\n options: GenerativeModelCallOptions<XAIResponseCaps, XAIResponseEndpointOptions, TModalities>;\n}): Result<XAICreateResponseSchema, BetterAgentError> {\n try {\n const o = args.options;\n const raw = o as unknown as XAIResponseEndpointOptions;\n type InputItem = Extract<typeof o.input, readonly unknown[]>[number];\n type MessagePart = Extract<InputItem, { type: \"message\" }> extends {\n content: infer TContent;\n }\n ? TContent extends readonly unknown[]\n ? TContent[number]\n : never\n : never;\n const input: unknown[] =\n typeof o.input === \"string\"\n ? [{ role: \"user\", content: [{ type: \"input_text\", text: o.input }] }]\n : o.input.flatMap<unknown>((item: InputItem) => {\n if (typeof item === \"string\") {\n return [{ role: \"user\", content: [{ type: \"input_text\", text: item }] }];\n }\n if (item.type === \"message\") {\n const role =\n typeof item.role === \"string\" &&\n (item.role === \"system\" ||\n item.role === \"user\" ||\n item.role === \"assistant\" ||\n item.role === \"developer\")\n ? item.role\n : \"user\";\n const isAssistant = role === \"assistant\";\n const content =\n typeof item.content === \"string\"\n ? [\n isAssistant\n ? { type: \"output_text\" as const, text: item.content }\n : { type: \"input_text\" as const, text: item.content },\n ]\n : item.content.map((part: MessagePart) => {\n if (part.type === \"text\") {\n return isAssistant\n ? { type: \"output_text\" as const, text: part.text }\n : { type: \"input_text\" as const, text: part.text };\n }\n if (isAssistant) {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"Assistant messages do not support image or file inputs\",\n {\n context: {\n provider: \"xai\",\n model: args.modelId,\n },\n },\n ).at({ at: \"xai.responses.map.input.assistantImage\" });\n }\n if (part.type === \"file\") {\n if (part.source.kind !== \"provider-file\") {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"xAI file inputs currently require a provider-file source\",\n {\n context: {\n provider: \"xai\",\n model: args.modelId,\n sourceKind: part.source.kind,\n },\n },\n ).at({ at: \"xai.responses.map.input.fileSource\" });\n }\n if (part.source.ref.provider !== \"xai\") {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"xAI file inputs require a provider-file reference for provider=xai\",\n {\n context: {\n provider: \"xai\",\n model: args.modelId,\n sourceProvider:\n part.source.ref.provider,\n },\n },\n ).at({\n at: \"xai.responses.map.input.fileProvider\",\n });\n }\n return {\n type: \"input_file\" as const,\n file_id: part.source.ref.id,\n ...(part.source.filename != null\n ? { filename: part.source.filename }\n : {}),\n };\n }\n if (part.type !== \"image\") {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n `Unsupported message part for xAI Responses: ${part.type}`,\n {\n context: {\n provider: \"xai\",\n model: args.modelId,\n partType: part.type,\n },\n },\n ).at({\n at: \"xai.responses.map.input.unsupportedPart\",\n });\n }\n\n return {\n type: \"input_image\" as const,\n detail: \"auto\" as const,\n image_url:\n part.source.kind === \"url\"\n ? part.source.url\n : `data:${part.source.mimeType};base64,${part.source.data}`,\n };\n });\n return [{ role, content }];\n }\n const callArguments =\n \"arguments\" in item && typeof item.arguments === \"string\"\n ? item.arguments\n : \"{}\";\n const call = {\n type: \"function_call\" as const,\n call_id: item.callId,\n name: item.name,\n arguments: callArguments,\n };\n if (item.result == null) return [call];\n return [\n call,\n {\n type: \"function_call_output\" as const,\n call_id: item.callId,\n output:\n typeof item.result === \"string\"\n ? item.result\n : JSON.stringify(item.result),\n status: item.isError === true ? \"incomplete\" : \"completed\",\n },\n ];\n });\n\n let text: XAICreateResponseSchema[\"text\"] | undefined;\n if (\"structured_output\" in o && o.structured_output) {\n const out = o.structured_output;\n const { name, strict = true } = out;\n if ((out.schema as { type?: unknown }).type !== \"object\") {\n return err(\n BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"Structured output schema must be an object\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.responses.map.structuredOutput\" }),\n );\n }\n text = { format: { type: \"json_schema\" as const, name, strict, schema: out.schema } };\n }\n\n const xaiTools: NonNullable<XAICreateResponseSchema[\"tools\"]> = [];\n const tools = (\"tools\" in o ? o.tools : []) ?? [];\n if (tools.length) {\n for (const tool of tools) {\n if (isXAINativeToolDefinition(tool)) {\n xaiTools.push(mapXAINativeToolToRequest(tool));\n continue;\n }\n const callableTool = tool as\n | ({ [TOOL_JSON_SCHEMA]?: unknown } & Record<string, unknown>)\n | undefined;\n if (!callableTool || !isCallableToolDefinition(callableTool as never)) continue;\n const parameters = callableTool[TOOL_JSON_SCHEMA];\n if ((parameters as { type?: unknown }).type !== \"object\") {\n return err(\n BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"Tool parameters schema must be an object\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.responses.map.tools\" }),\n );\n }\n xaiTools.push({\n type: \"function\",\n name: String(callableTool.name ?? \"\"),\n description:\n typeof callableTool.description === \"string\"\n ? callableTool.description\n : null,\n parameters,\n strict: typeof callableTool.strict === \"boolean\" ? callableTool.strict : null,\n });\n }\n }\n\n let xaiToolChoice: XAICreateResponse[\"tool_choice\"] | undefined;\n if (\n \"tools\" in o &&\n o.tools &&\n \"toolChoice\" in o &&\n o.toolChoice &&\n o.toolChoice.type !== \"auto\"\n ) {\n const tc = o.toolChoice;\n if (tc.type === \"none\") {\n xaiToolChoice = \"none\";\n } else if (tc.type === \"required\") {\n xaiToolChoice = \"required\";\n } else if (tc.type === \"tool\") {\n if (!xaiTools.length) {\n return err(\n BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n \"toolChoice=tool requires tools[] to be provided\",\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.responses.map.toolChoice\" }),\n );\n }\n const exists = xaiTools.some(\n (t) =>\n typeof t === \"object\" &&\n t &&\n \"type\" in t &&\n t.type === \"function\" &&\n \"name\" in t &&\n t.name === tc.name,\n );\n if (!exists) {\n return err(\n BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n `Requested tool not found: ${tc.name}`,\n { context: { provider: \"xai\", model: args.modelId } },\n ).at({ at: \"xai.responses.map.toolChoice\" }),\n );\n }\n xaiToolChoice = { type: \"function\", name: tc.name };\n }\n }\n\n const request: XAICreateResponseSchema = {\n ...extractPassthroughOptions(o as Record<string, unknown>, XAI_RESPONSE_KNOWN_KEYS),\n model: args.modelId as XAICreateResponseSchema[\"model\"],\n input,\n ...omitNullish({\n text,\n tools: xaiTools.length ? xaiTools : undefined,\n tool_choice: xaiToolChoice,\n include: o.include,\n instructions: raw.instructions,\n metadata: o.metadata,\n parallel_tool_calls: o.parallel_tool_calls,\n previous_response_id: o.previous_response_id,\n reasoning: o.reasoning,\n search_parameters: o.search_parameters,\n service_tier: o.service_tier,\n store: o.store,\n user: o.user,\n }),\n };\n\n const responseOpts = o as {\n modalities?: readonly string[];\n logprobs?: boolean;\n max_output_tokens?: number;\n temperature?: number;\n top_logprobs?: number;\n top_p?: number;\n };\n if (responseOpts.modalities === undefined || responseOpts.modalities.includes(\"text\")) {\n if (responseOpts.max_output_tokens != null)\n request.max_output_tokens = responseOpts.max_output_tokens;\n if (responseOpts.logprobs != null) request.logprobs = responseOpts.logprobs;\n if (responseOpts.temperature != null) request.temperature = responseOpts.temperature;\n if (responseOpts.top_logprobs != null) request.top_logprobs = responseOpts.top_logprobs;\n if (responseOpts.top_p != null) request.top_p = responseOpts.top_p;\n }\n\n return ok(request);\n } catch (e) {\n return err(\n BetterAgentError.wrap({\n err: e,\n message: \"Failed to map xAI Responses request\",\n opts: { code: \"INTERNAL\", context: { provider: \"xai\", model: args.modelId } },\n }).at({ at: \"xai.responses.mapToRequest\" }),\n );\n }\n}\n\nexport function mapFromXAIResponsesResponse(response: XAICreateResponse): GenerativeModelResponse {\n const outputItems: Array<GenerativeModelOutputItem> = [];\n for (const item of response.output ?? []) {\n if (!item || typeof item !== \"object\" || !(\"type\" in item)) continue;\n if (item.type === \"message\") {\n const parts: Array<GenerativeModelOutputMessagePart> = Array.isArray(item.content)\n ? item.content.flatMap<GenerativeModelOutputMessagePart>((part: unknown) => {\n if (!part || typeof part !== \"object\" || !(\"type\" in part)) return [];\n const candidate = part as { type?: unknown; text?: unknown };\n if (candidate.type === \"output_text\" && typeof candidate.text === \"string\") {\n return [{ type: \"text\" as const, text: candidate.text }];\n }\n return [];\n })\n : [];\n if (parts.length > 0) {\n outputItems.push({\n type: \"message\",\n role: (item.role ?? \"assistant\") as GenerativeModelOutputMessage[\"role\"],\n content: parts,\n });\n }\n continue;\n }\n if (\n item.type === \"function_call\" &&\n typeof item.name === \"string\" &&\n typeof item.call_id === \"string\"\n ) {\n outputItems.push({\n type: \"tool-call\",\n name: item.name,\n arguments: typeof item.arguments === \"string\" ? item.arguments : \"{}\",\n callId: item.call_id,\n });\n continue;\n }\n if (typeof item.type === \"string\" && item.type.endsWith(\"_call\")) {\n if (!(\"id\" in item) || !(typeof item.id === \"string\" && item.id.length > 0)) continue;\n outputItems.push({\n type: \"provider-tool-result\",\n name: item.type.slice(0, -\"_call\".length),\n callId: item.id,\n result: item,\n } satisfies GenerativeModelProviderToolResult);\n continue;\n }\n if (typeof item.type === \"string\" && item.type.endsWith(\"_call_output\")) {\n if (\n !(\"call_id\" in item) ||\n typeof item.call_id !== \"string\" ||\n item.call_id.length === 0\n )\n continue;\n outputItems.push({\n type: \"provider-tool-result\",\n name: item.type.slice(0, -\"_call_output\".length),\n callId: item.call_id,\n result: item,\n } satisfies GenerativeModelProviderToolResult);\n }\n }\n\n const inputTokens = response.usage?.input_tokens;\n const outputTokens = response.usage?.output_tokens;\n const totalTokens =\n typeof inputTokens === \"number\" && typeof outputTokens === \"number\"\n ? inputTokens + outputTokens\n : undefined;\n const usage: GenerativeModelUsage = omitNullish({\n inputTokens,\n outputTokens,\n totalTokens,\n reasoningTokens: response.usage?.output_tokens_details?.reasoning_tokens,\n cachedInputTokens: response.usage?.input_tokens_details?.cached_tokens,\n });\n const hasToolCalls = outputItems.some(\n (item) => item.type === \"tool-call\" && \"arguments\" in item,\n );\n let finishReason: GenerativeModelFinishReason;\n const incompleteReason = response.incomplete_details?.reason;\n if (incompleteReason === \"max_output_tokens\") finishReason = \"length\";\n else if (incompleteReason === \"content_filter\") finishReason = \"content-filter\";\n else if (incompleteReason) finishReason = \"other\";\n else if (hasToolCalls) finishReason = \"tool-calls\";\n else finishReason = \"stop\";\n\n return { output: outputItems, finishReason, usage, response: { body: response } };\n}\n\nexport function mapFromXAIResponsesStreamEvent(\n event: XAIResponseStreamEvent,\n messageId: string,\n): Result<\n { kind: \"event\"; event: Event } | { kind: \"final\"; response: GenerativeModelResponse } | null,\n BetterAgentError\n> {\n if (event.type === \"response.reasoning_summary_part.added\") {\n return ok({\n kind: \"event\",\n event: {\n type: Events.REASONING_MESSAGE_START,\n messageId,\n role: \"assistant\",\n visibility: \"summary\",\n provider: \"xai\",\n timestamp: Date.now(),\n },\n });\n }\n if (event.type === \"response.reasoning_summary_text.delta\") {\n return ok({\n kind: \"event\",\n event: {\n type: Events.REASONING_MESSAGE_CONTENT,\n messageId,\n visibility: \"summary\",\n delta: event.delta ?? \"\",\n provider: \"xai\",\n timestamp: Date.now(),\n },\n });\n }\n if (event.type === \"response.reasoning_summary_text.done\") {\n return ok({\n kind: \"event\",\n event: {\n type: Events.REASONING_MESSAGE_END,\n messageId,\n visibility: \"summary\",\n provider: \"xai\",\n timestamp: Date.now(),\n },\n });\n }\n if (event.type === \"response.reasoning_text.delta\") {\n return ok({\n kind: \"event\",\n event: {\n type: Events.REASONING_MESSAGE_CONTENT,\n messageId,\n visibility: \"full\",\n delta: event.delta ?? \"\",\n provider: \"xai\",\n timestamp: Date.now(),\n },\n });\n }\n if (event.type === \"response.reasoning_text.done\") {\n return ok({\n kind: \"event\",\n event: {\n type: Events.REASONING_MESSAGE_END,\n messageId,\n visibility: \"full\",\n provider: \"xai\",\n timestamp: Date.now(),\n },\n });\n }\n if (event.type === \"response.output_item.added\") {\n if (event.item?.type === \"message\") {\n return ok({\n kind: \"event\",\n event: {\n type: Events.TEXT_MESSAGE_START,\n messageId,\n role: \"assistant\",\n timestamp: Date.now(),\n },\n });\n }\n if (event.item?.type === \"function_call\") {\n const toolCallId =\n typeof event.item.call_id === \"string\" && event.item.call_id.length > 0\n ? event.item.call_id\n : event.item.id;\n if (!(typeof toolCallId === \"string\" && toolCallId.length > 0)) return ok(null);\n return ok({\n kind: \"event\",\n event: {\n type: Events.TOOL_CALL_START,\n toolCallId,\n toolCallName: event.item.name ?? \"\",\n parentMessageId: messageId,\n timestamp: Date.now(),\n } as Event,\n });\n }\n if (\n typeof event.item?.type === \"string\" &&\n event.item.type.endsWith(\"_call\") &&\n event.item.type !== \"function_call\" &&\n typeof event.item.id === \"string\" &&\n event.item.id.length > 0\n ) {\n return ok({\n kind: \"event\",\n event: {\n type: Events.TOOL_CALL_START,\n toolCallId: event.item.id,\n toolCallName: event.item.type.slice(0, -\"_call\".length),\n parentMessageId: messageId,\n timestamp: Date.now(),\n } as Event,\n });\n }\n }\n if (event.type === \"response.output_text.delta\") {\n return ok({\n kind: \"event\",\n event: {\n type: Events.TEXT_MESSAGE_CONTENT,\n messageId,\n delta: event.delta ?? \"\",\n timestamp: Date.now(),\n },\n });\n }\n if (event.type === \"response.output_text.done\") {\n return ok({\n kind: \"event\",\n event: { type: Events.TEXT_MESSAGE_END, messageId, timestamp: Date.now() },\n });\n }\n if (event.type === \"response.function_call_arguments.delta\") {\n const toolCallId =\n typeof event.call_id === \"string\" && event.call_id.length > 0\n ? event.call_id\n : event.item_id;\n if (!(typeof toolCallId === \"string\" && toolCallId.length > 0)) return ok(null);\n return ok({\n kind: \"event\",\n event: {\n type: Events.TOOL_CALL_ARGS,\n parentMessageId: messageId,\n toolCallId,\n toolCallName: \"unknown\",\n delta: event.delta ?? \"\",\n timestamp: Date.now(),\n } as Event,\n });\n }\n if (event.type === \"response.function_call_arguments.done\") {\n const toolCallId =\n typeof event.call_id === \"string\" && event.call_id.length > 0\n ? event.call_id\n : event.item_id;\n if (!(typeof toolCallId === \"string\" && toolCallId.length > 0)) return ok(null);\n return ok({\n kind: \"event\",\n event: {\n type: Events.TOOL_CALL_END,\n parentMessageId: messageId,\n toolCallId,\n toolCallName: \"unknown\",\n timestamp: Date.now(),\n } as Event,\n });\n }\n if (\n event.type === \"response.web_search_call.in_progress\" ||\n event.type === \"response.web_search_call.searching\" ||\n event.type === \"response.web_search_call.completed\" ||\n event.type === \"response.x_search_call.in_progress\" ||\n event.type === \"response.x_search_call.searching\" ||\n event.type === \"response.x_search_call.completed\" ||\n event.type === \"response.file_search_call.in_progress\" ||\n event.type === \"response.file_search_call.searching\" ||\n event.type === \"response.file_search_call.completed\" ||\n event.type === \"response.code_interpreter_call.in_progress\" ||\n event.type === \"response.code_interpreter_call.interpreting\" ||\n event.type === \"response.code_interpreter_call.completed\" ||\n event.type === \"response.code_execution_call.in_progress\" ||\n event.type === \"response.code_execution_call.interpreting\" ||\n event.type === \"response.code_execution_call.completed\" ||\n event.type === \"response.mcp_call.in_progress\" ||\n event.type === \"response.mcp_call.completed\" ||\n event.type === \"response.mcp_call.failed\" ||\n event.type === \"response.mcp_list_tools.in_progress\" ||\n event.type === \"response.mcp_list_tools.completed\" ||\n event.type === \"response.mcp_list_tools.failed\"\n ) {\n const fullType = event.type.slice(\"response.\".length);\n const dotIndex = fullType.lastIndexOf(\".\");\n const toolSegment = dotIndex >= 0 ? fullType.slice(0, dotIndex) : fullType;\n const status = dotIndex >= 0 ? fullType.slice(dotIndex + 1) : \"unknown\";\n const tool = toolSegment.endsWith(\"_call\")\n ? toolSegment.slice(0, -\"_call\".length)\n : toolSegment;\n return ok({\n kind: \"event\",\n event: {\n type: Events.DATA_PART,\n ...(typeof event.item_id === \"string\" ? { id: event.item_id } : {}),\n data: { endpoint: \"responses\", tool, status, raw: event },\n timestamp: Date.now(),\n },\n });\n }\n if (event.type === \"response.output_item.done\") {\n if (\n typeof event.item?.type === \"string\" &&\n event.item.type.endsWith(\"_call\") &&\n event.item.type !== \"function_call\" &&\n typeof event.item.id === \"string\" &&\n event.item.id.length > 0\n ) {\n return ok({\n kind: \"event\",\n event: {\n type: Events.TOOL_CALL_RESULT,\n parentMessageId: messageId,\n toolCallId: event.item.id,\n toolCallName: event.item.type.slice(0, -\"_call\".length),\n result: event.item,\n timestamp: Date.now(),\n } as Event,\n });\n }\n }\n if (event.type === \"response.completed\") {\n return ok({\n kind: \"final\",\n response: mapFromXAIResponsesResponse(event.response as XAICreateResponse),\n });\n }\n if (event.type === \"error\") {\n return err(\n BetterAgentError.fromCode(\"UPSTREAM_FAILED\", event.message ?? \"xAI streaming error\", {\n context: { provider: \"xai\", upstreamCode: \"STREAM_ERROR\", raw: event },\n }).at({ at: \"xai.responses.stream.event\" }),\n );\n }\n return ok(null);\n}\n","import type { RunContext } from \"@better-agent/core\";\nimport type { Event } from \"@better-agent/core/events\";\nimport type {\n GenerativeModelCallOptions,\n GenerativeModelGenerateResult,\n GenerativeModelResponse,\n ModalitiesParam,\n} from \"@better-agent/core/providers\";\nimport { BetterAgentError } from \"@better-agent/shared/errors\";\nimport type { Result } from \"@better-agent/shared/neverthrow\";\nimport { err, ok } from \"@better-agent/shared/neverthrow\";\n\nimport type { createXAIClient } from \"../client/create-client\";\nimport type { XAIResponseStreamEvent } from \"../shared/schemas\";\nimport {\n mapFromXAIResponsesResponse,\n mapFromXAIResponsesStreamEvent,\n mapToXAIResponsesRequest,\n} from \"./mappers\";\nimport type {\n XAIResponseCaps,\n XAIResponseEndpointOptions,\n XAIResponseGenerativeModel,\n XAIResponseModelId,\n} from \"./types\";\n\nexport const XAI_RESPONSE_CAPS = {\n inputModalities: { text: true, image: true, file: true },\n inputShape: \"chat\",\n replayMode: \"multi_turn\",\n supportsInstruction: true,\n outputModalities: {\n text: {\n options: {},\n },\n },\n tools: true,\n structured_output: true,\n additionalSupportedRoles: [\"developer\"],\n} as const satisfies XAIResponseCaps;\n\nconst createDeferred = <T>() => {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n};\n\nexport const createXAIResponsesModel = <M extends XAIResponseModelId>(\n modelId: M,\n client: ReturnType<typeof createXAIClient>,\n): XAIResponseGenerativeModel<M> => {\n const doGenerate: NonNullable<XAIResponseGenerativeModel<M>[\"doGenerate\"]> = async <\n const TModalities extends ModalitiesParam<XAIResponseCaps>,\n >(\n options: GenerativeModelCallOptions<\n XAIResponseCaps,\n XAIResponseEndpointOptions,\n TModalities\n >,\n ctx: RunContext,\n ) => {\n const requestBodyResult = mapToXAIResponsesRequest({\n modelId,\n options,\n });\n if (requestBodyResult.isErr()) {\n return err(requestBodyResult.error.at({ at: \"xai.generate.mapRequest\" }));\n }\n\n const raw = await client.responses.create(requestBodyResult.value, {\n signal: ctx.signal ?? null,\n });\n if (raw.isErr()) {\n return err(raw.error.at({ at: \"xai.generate.http\" }));\n }\n\n const response = mapFromXAIResponsesResponse(raw.value);\n return ok({\n response: {\n ...response,\n request: {\n body: requestBodyResult.value,\n },\n } satisfies GenerativeModelResponse,\n } satisfies GenerativeModelGenerateResult<XAIResponseCaps>);\n };\n\n const doGenerateStream: NonNullable<XAIResponseGenerativeModel<M>[\"doGenerateStream\"]> = async <\n const TModalities extends ModalitiesParam<XAIResponseCaps>,\n >(\n options: GenerativeModelCallOptions<\n XAIResponseCaps,\n XAIResponseEndpointOptions,\n TModalities\n >,\n ctx: RunContext,\n ) => {\n const requestBodyResult = mapToXAIResponsesRequest({\n modelId,\n options,\n });\n if (requestBodyResult.isErr()) {\n return err(requestBodyResult.error.at({ at: \"xai.generateStream.mapRequest\" }));\n }\n\n const streamResult = await client.responses.stream(requestBodyResult.value, {\n signal: ctx.signal ?? null,\n });\n if (streamResult.isErr()) {\n return err(streamResult.error.at({ at: \"xai.generateStream.http\" }));\n }\n\n const {\n promise: final,\n resolve: resolveFinal,\n reject: rejectFinal,\n } = createDeferred<GenerativeModelResponse>();\n\n const events = (async function* (): AsyncGenerator<Result<Event, BetterAgentError>> {\n const messageId = ctx.generateMessageId();\n let sawFinal = false;\n\n try {\n for await (const raw of streamResult.value) {\n if (raw.isErr()) {\n rejectFinal(raw.error);\n yield err(raw.error);\n return;\n }\n\n const mapped = mapFromXAIResponsesStreamEvent(\n raw.value as XAIResponseStreamEvent,\n messageId,\n );\n if (mapped.isErr()) {\n const error = mapped.error.at({ at: \"xai.generateStream.mapEvent\" });\n rejectFinal(error);\n yield err(error);\n return;\n }\n\n const value = mapped.value;\n if (!value) continue;\n\n if (value.kind === \"final\") {\n sawFinal = true;\n resolveFinal(value.response);\n continue;\n }\n\n yield ok(value.event);\n }\n } finally {\n if (!sawFinal) {\n rejectFinal(\n BetterAgentError.fromCode(\n \"UPSTREAM_FAILED\",\n \"xAI stream ended without a final response event.\",\n {\n context: {\n provider: \"xai\",\n model: String(modelId),\n },\n },\n ).at({\n at: \"xai.generateStream.final\",\n }),\n );\n }\n }\n })();\n\n return ok({ events, final });\n };\n\n return {\n providerId: \"xai\",\n modelId,\n caps: XAI_RESPONSE_CAPS,\n doGenerate,\n doGenerateStream,\n };\n};\n","import { z } from \"zod\";\n\nexport type XAIResponseStreamEvent =\n | {\n type: \"error\";\n message?: string;\n [key: string]: unknown;\n }\n | {\n type: \"response.completed\";\n response: unknown;\n [key: string]: unknown;\n }\n | {\n type:\n | \"response.reasoning_summary_part.added\"\n | \"response.reasoning_summary_text.done\"\n | \"response.reasoning_text.done\"\n | \"response.output_text.done\";\n [key: string]: unknown;\n }\n | {\n type:\n | \"response.reasoning_summary_text.delta\"\n | \"response.reasoning_text.delta\"\n | \"response.output_text.delta\"\n | \"response.function_call_arguments.delta\";\n delta?: string;\n item_id?: string;\n call_id?: string;\n [key: string]: unknown;\n }\n | {\n type: \"response.function_call_arguments.done\";\n item_id?: string;\n call_id?: string;\n [key: string]: unknown;\n }\n | {\n type: \"response.output_item.added\" | \"response.output_item.done\";\n item: {\n type: string;\n id?: string;\n call_id?: string;\n name?: string;\n status?: string;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n }\n | {\n type:\n | \"response.web_search_call.in_progress\"\n | \"response.web_search_call.searching\"\n | \"response.web_search_call.completed\"\n | \"response.x_search_call.in_progress\"\n | \"response.x_search_call.searching\"\n | \"response.x_search_call.completed\"\n | \"response.file_search_call.in_progress\"\n | \"response.file_search_call.searching\"\n | \"response.file_search_call.completed\"\n | \"response.code_interpreter_call.in_progress\"\n | \"response.code_interpreter_call.interpreting\"\n | \"response.code_interpreter_call.completed\"\n | \"response.code_execution_call.in_progress\"\n | \"response.code_execution_call.interpreting\"\n | \"response.code_execution_call.completed\"\n | \"response.mcp_call.in_progress\"\n | \"response.mcp_call.completed\"\n | \"response.mcp_call.failed\"\n | \"response.mcp_list_tools.in_progress\"\n | \"response.mcp_list_tools.completed\"\n | \"response.mcp_list_tools.failed\";\n item_id?: string;\n [key: string]: unknown;\n };\n\nexport type XAIFileObjectSchema = z.infer<typeof XAIFileObjectSchema>;\nexport type XAIFileListSchema = z.infer<typeof XAIFileListSchema>;\nexport type XAIDeleteFileResponseSchema = z.infer<typeof XAIDeleteFileResponseSchema>;\n\nexport const XAI_RESPONSE_MODEL_NAMES = [\n \"grok-3\",\n \"grok-3-latest\",\n \"grok-3-beta\",\n \"grok-3-fast\",\n \"grok-3-fast-latest\",\n \"grok-3-fast-beta\",\n \"grok-3-mini\",\n \"grok-4\",\n \"grok-4-1-fast-reasoning\",\n \"grok-4.20-beta-latest-non-reasoning\",\n \"grok-4.20-multi-agent-beta-0309\",\n \"grok-code-fast-1\",\n] as const;\n\nexport const XAI_IMAGE_MODEL_NAMES = [\"grok-imagine-image\"] as const;\n\nexport const XAIResponseModels = z\n .enum(XAI_RESPONSE_MODEL_NAMES)\n .describe(\n \"Current documented xAI response model names. For the latest team-specific availability, also check <https://console.x.ai/team/default/models> and <https://docs.x.ai/docs/models>.\",\n );\n\nexport const XAIImageModels = z\n .enum(XAI_IMAGE_MODEL_NAMES)\n .describe(\n \"Current documented xAI image model names. For the latest team-specific availability, also check <https://console.x.ai/team/default/models> and <https://docs.x.ai/docs/models>.\",\n );\n\nexport type XAIResponseModels = z.infer<typeof XAIResponseModels>;\nexport type XAIImageModels = z.infer<typeof XAIImageModels>;\nexport type XAIModelKind = \"text\" | \"image\";\n\nexport const XAI_MODEL_KINDS = {\n \"grok-3\": \"text\",\n \"grok-3-latest\": \"text\",\n \"grok-3-beta\": \"text\",\n \"grok-3-fast\": \"text\",\n \"grok-3-fast-latest\": \"text\",\n \"grok-3-fast-beta\": \"text\",\n \"grok-3-mini\": \"text\",\n \"grok-4\": \"text\",\n \"grok-4-1-fast-reasoning\": \"text\",\n \"grok-4.20-beta-latest-non-reasoning\": \"text\",\n \"grok-4.20-multi-agent-beta-0309\": \"text\",\n \"grok-code-fast-1\": \"text\",\n \"grok-imagine-image\": \"image\",\n} as const satisfies Record<XAIResponseModels | XAIImageModels, XAIModelKind>;\n\nexport const getXAIModelKind = (modelId: string): XAIModelKind | undefined =>\n (XAI_MODEL_KINDS as Record<string, XAIModelKind | undefined>)[modelId];\n\nconst XAIFileObjectSchema = z\n .object({\n id: z.string().describe(\"Unique file identifier.\"),\n object: z.string().optional().describe(\"Object type, typically `file`.\"),\n bytes: z.number().int().nonnegative().optional().describe(\"File size in bytes.\"),\n created_at: z\n .number()\n .int()\n .optional()\n .describe(\"Unix timestamp when the file was created.\"),\n expires_at: z.number().int().nullish().describe(\"Optional expiration time.\"),\n filename: z.string().optional().describe(\"Original file name.\"),\n purpose: z.string().optional().describe(\"Declared file purpose.\"),\n status: z.string().optional().describe(\"Provider-side processing status.\"),\n status_details: z.any().optional().describe(\"Provider-side status details.\"),\n })\n .passthrough()\n .describe(\"xAI file object.\");\n\nconst XAIFileListSchema = z\n .object({\n object: z.string().optional().describe(\"List object type.\"),\n data: z.array(XAIFileObjectSchema).describe(\"Files returned by the provider.\"),\n first_id: z.string().nullish().optional().describe(\"First file id in the page.\"),\n last_id: z.string().nullish().optional().describe(\"Last file id in the page.\"),\n has_more: z.boolean().optional().describe(\"Whether additional pages are available.\"),\n })\n .passthrough()\n .describe(\"xAI files list response.\");\n\nconst XAIDeleteFileResponseSchema = z\n .object({\n id: z.string().describe(\"Deleted file identifier.\"),\n object: z.string().optional().describe(\"Delete response object type.\"),\n deleted: z.boolean().describe(\"Whether the file was deleted.\"),\n })\n .passthrough()\n .describe(\"xAI delete file response.\");\n\nexport { type XAIDeleteFileResponseSchema, type XAIFileListSchema, XAIFileObjectSchema };\n","import type { createXAIClient } from \"../client/create-client\";\nimport { createXAIImagesModel } from \"../images/model\";\nimport type { XAIImageGenerativeModel, XAIImageModelId } from \"../images/types\";\nimport { createXAIResponsesModel } from \"../responses/model\";\nimport type { XAIResponseGenerativeModel, XAIResponseModelId } from \"../responses/types\";\nimport { getXAIModelKind } from \"../shared/schemas\";\nimport type { XAIGenerativeModel, XAIModelId } from \"../types\";\n\nexport function createXAIModel<M extends XAIModelId>(\n modelId: M,\n client: ReturnType<typeof createXAIClient>,\n): XAIGenerativeModel<M>;\nexport function createXAIModel<M extends XAIImageModelId>(\n modelId: M,\n client: ReturnType<typeof createXAIClient>,\n): XAIImageGenerativeModel<M>;\nexport function createXAIModel<M extends XAIResponseModelId>(\n modelId: M,\n client: ReturnType<typeof createXAIClient>,\n): XAIResponseGenerativeModel<M>;\nexport function createXAIModel(modelId: string, client: ReturnType<typeof createXAIClient>) {\n if (getXAIModelKind(modelId) === \"image\") {\n return createXAIImagesModel(modelId as XAIImageModelId, client);\n }\n return createXAIResponsesModel(modelId as XAIResponseModelId, client);\n}\n","import { createXAIClient as createXAIHttpClient } from \"./client\";\nimport { createXAIImagesModel } from \"./images/model\";\nimport { createXAIModel } from \"./models\";\nimport { createXAIResponsesModel } from \"./responses/model\";\nimport { createXAINativeToolBuilders } from \"./tools\";\nimport type {\n XAIConfig,\n XAIGenerativeModel,\n XAIImageModelId,\n XAIModelId,\n XAIProvider,\n XAIResponseModelId,\n} from \"./types\";\n\nexport const createXAI = (config: XAIConfig): XAIProvider => {\n const httpClient = createXAIHttpClient(config);\n const tools = createXAINativeToolBuilders();\n\n const provider: XAIProvider = {\n id: \"xai\",\n tools,\n files: httpClient.files,\n\n model<M extends XAIModelId>(modelId: M) {\n return createXAIModel(modelId, httpClient) as XAIGenerativeModel<M>;\n },\n\n text<M extends XAIResponseModelId>(modelId: M) {\n return createXAIResponsesModel(modelId, httpClient);\n },\n\n image<M extends XAIImageModelId>(modelId: M) {\n return createXAIImagesModel(modelId, httpClient);\n },\n };\n\n return provider;\n};\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@better-agent/providers",
|
|
3
|
+
"version": "0.1.0-beta.1",
|
|
4
|
+
"description": "Better Agent providers TypeScript library",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/better-agent/better-agent.git",
|
|
9
|
+
"directory": "packages/providers"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/better-agent/better-agent/tree/main/packages/providers",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/better-agent/better-agent/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"exports": {
|
|
18
|
+
"./openai": {
|
|
19
|
+
"types": "./dist/openai/index.d.mts",
|
|
20
|
+
"import": "./dist/openai/index.mjs"
|
|
21
|
+
},
|
|
22
|
+
"./anthropic": {
|
|
23
|
+
"types": "./dist/anthropic/index.d.mts",
|
|
24
|
+
"import": "./dist/anthropic/index.mjs"
|
|
25
|
+
},
|
|
26
|
+
"./xai": {
|
|
27
|
+
"types": "./dist/xai/index.d.mts",
|
|
28
|
+
"import": "./dist/xai/index.mjs"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "bunx tsdown",
|
|
33
|
+
"dev": "bunx tsdown --watch --no-clean",
|
|
34
|
+
"lint:package": "bunx publint run --strict",
|
|
35
|
+
"lint:types": "npm_config_cache=../../.npm-cache bunx attw --profile esm-only --pack .",
|
|
36
|
+
"lint": "bunx biome check .",
|
|
37
|
+
"typecheck": "bunx tsc -p tsconfig.json --noEmit",
|
|
38
|
+
"format": "bunx biome format --write .",
|
|
39
|
+
"clean": "bunx rimraf dist"
|
|
40
|
+
},
|
|
41
|
+
"files": ["dist"],
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@better-agent/shared": "0.1.0-canary.2",
|
|
47
|
+
"zod": "^4.1.13"
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"@better-agent/core": "0.1.0-canary.2"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/bun": "^1.2.18",
|
|
54
|
+
"@types/node": "^22.15.30"
|
|
55
|
+
}
|
|
56
|
+
}
|