@standardagents/cloudflare 0.0.1-dev.ffff
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/index.d.ts +60 -0
- package/dist/index.js +1027 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/CloudflareProvider.ts","../src/chat-completions-transformers.ts","../src/icons.ts","../src/pricing.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import type {\n LLMProviderInterface as Provider,\n ProviderFactoryConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ModelCapabilities,\n ProviderModelInfo,\n InspectedRequest,\n} from '@standardagents/spec';\nimport { ProviderError } from '@standardagents/spec';\nimport {\n buildChatParams,\n transformChatResponse,\n createChatStreamState,\n parseChatSSEStream,\n createChatErrorChunk,\n truncateChatBase64,\n type CloudflareChatCompletionResponse,\n} from './chat-completions-transformers';\nimport { getCloudflareIconDataUri, getCloudflareModelIconDataUri } from './icons';\nimport { calculateCloudflareUsageCost } from './pricing';\n\nexport { ProviderError };\n\nexport interface CloudflareConfig extends ProviderFactoryConfig {\n accountId?: string;\n}\n\ninterface CloudflareModelCatalogEntry {\n id: string;\n name: string;\n description: string;\n contextLength?: number;\n capabilities: ModelCapabilities;\n}\n\ninterface CloudflareApiModel {\n id?: string;\n name?: string;\n description?: string;\n task?: string;\n source?: number | string;\n experimental?: boolean;\n author?: string;\n alias?: string;\n properties?: Record<string, unknown>;\n}\n\ninterface CloudflareModelsApiResponse {\n result?: CloudflareApiModel[];\n result_info?: {\n page?: number;\n per_page?: number;\n total_pages?: number;\n total_count?: number;\n count?: number;\n };\n}\n\ninterface CloudflareModelsQuery {\n search?: string;\n page?: number;\n perPage?: number;\n}\n\ninterface CloudflareModelsPage {\n models: ProviderModelInfo[];\n hasNextPage: boolean;\n}\n\nconst STATIC_MODELS: CloudflareModelCatalogEntry[] = [\n {\n id: '@cf/meta/llama-3.1-8b-instruct',\n name: 'Llama 3.1 8B Instruct',\n description: 'Meta text generation model on Workers AI.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n },\n },\n {\n id: '@cf/meta/llama-3.2-11b-vision-instruct',\n name: 'Llama 3.2 11B Vision Instruct',\n description: 'Meta multimodal model with image understanding on Workers AI.',\n contextLength: 131072,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n },\n },\n {\n id: '@cf/meta/llama-3.3-70b-instruct-fp8-fast',\n name: 'Llama 3.3 70B Instruct Fast',\n description: 'Fast FP8 Meta model with function calling support.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n },\n },\n {\n id: '@cf/meta/llama-4-scout-17b-16e-instruct',\n name: 'Llama 4 Scout 17B',\n description: 'Meta multimodal MoE model with tool calling and vision.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n },\n },\n {\n id: '@cf/openai/gpt-oss-120b',\n name: 'GPT OSS 120B',\n description: 'OpenAI open-weight reasoning model on Workers AI.',\n contextLength: 128000,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 128000,\n reasoningLevels: { 0: null, 33: 'low', 66: 'medium', 100: 'high' },\n },\n },\n {\n id: '@cf/openai/gpt-oss-20b',\n name: 'GPT OSS 20B',\n description: 'Lower-latency OpenAI open-weight model on Workers AI.',\n contextLength: 128000,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 128000,\n reasoningLevels: { 0: null, 33: 'low', 66: 'medium', 100: 'high' },\n },\n },\n {\n id: '@cf/qwen/qwen3-30b-a3b-fp8',\n name: 'Qwen3 30B A3B FP8',\n description: 'Qwen reasoning and agent model on Workers AI.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: '@cf/qwen/qwq-32b',\n name: 'QwQ 32B',\n description: 'Qwen reasoning model on Workers AI.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: '@cf/zhipu-ai/glm-4.7-flash',\n name: 'GLM 4.7 Flash',\n description: 'Zhipu AI multilingual instruct model on Workers AI.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b',\n name: 'DeepSeek R1 Distill Qwen 32B',\n description: 'DeepSeek distilled reasoning model on Workers AI.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: false,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: '@cf/mistral/mistral-small-3.1-24b-instruct',\n name: 'Mistral Small 3.1 24B Instruct',\n description: 'Mistral text and vision model on Workers AI.',\n contextLength: 128000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 128000,\n },\n },\n];\n\nexport class CloudflareProvider implements Provider {\n readonly name = 'cloudflare';\n readonly specificationVersion = '1' as const;\n\n private config: CloudflareConfig;\n\n private static readonly DEFAULT_PER_PAGE = 25;\n private static readonly MAX_FULL_LIST_PAGES = 20;\n private static readonly remoteModelCache = new Map<string, ProviderModelInfo>();\n\n constructor(config: CloudflareConfig) {\n this.config = config;\n }\n\n supportsModel(_modelId: string): boolean {\n return true;\n }\n\n getIcon(modelId?: string): string {\n return getCloudflareModelIconDataUri(modelId) || getCloudflareIconDataUri();\n }\n\n private resolveBaseUrl(): string {\n if (this.config.baseUrl) {\n return this.config.baseUrl.replace(/\\/$/, '');\n }\n\n if (this.config.accountId) {\n return `https://api.cloudflare.com/client/v4/accounts/${this.config.accountId}/ai/v1`;\n }\n\n throw new ProviderError(\n 'Cloudflare Workers AI requires CLOUDFLARE_ACCOUNT_ID or providerOptions.baseUrl.',\n 'invalid_request'\n );\n }\n\n private resolveModelsUrl(): string {\n if (this.config.accountId) {\n return `https://api.cloudflare.com/client/v4/accounts/${this.config.accountId}/ai/models/search`;\n }\n\n const baseUrl = this.resolveBaseUrl();\n const accountScopedMatch = baseUrl.match(/^(https:\\/\\/api\\.cloudflare\\.com\\/client\\/v4\\/accounts\\/[^/]+)\\/ai\\/v1$/);\n if (accountScopedMatch) {\n return `${accountScopedMatch[1]}/ai/models/search`;\n }\n\n throw new ProviderError(\n 'Cloudflare model discovery requires CLOUDFLARE_ACCOUNT_ID or an account-scoped baseUrl.',\n 'invalid_request'\n );\n }\n\n private getStaticModel(modelId: string): CloudflareModelCatalogEntry | undefined {\n return STATIC_MODELS.find((candidate) => candidate.id === modelId);\n }\n\n private getContextLength(properties?: Record<string, unknown>): number | undefined {\n if (!properties) return undefined;\n\n const value =\n properties['context_length'] ??\n properties['context_window'] ??\n properties['max_context_tokens'] ??\n properties['max_input_tokens'];\n\n return typeof value === 'number' ? value : undefined;\n }\n\n private getModelIconSource(model: CloudflareApiModel, fallbackId: string): string {\n const candidates = [model.id, model.name, model.alias, fallbackId]\n .filter((value): value is string => typeof value === 'string' && value.length > 0);\n\n return (\n candidates.find((value) => Boolean(getCloudflareModelIconDataUri(value))) ||\n candidates.find((value) => value.includes('/')) ||\n fallbackId\n );\n }\n\n private getExecutionModelId(model: CloudflareApiModel, fallbackId: string): string {\n const publicId = [model.name, model.alias]\n .find((value): value is string => typeof value === 'string' && value.startsWith('@cf/'));\n\n if (publicId) {\n return publicId;\n }\n\n if (fallbackId.startsWith('@cf/')) {\n return fallbackId;\n }\n\n return fallbackId;\n }\n\n private toProviderModelInfo(model: CloudflareApiModel): ProviderModelInfo | null {\n const id = typeof model.id === 'string' ? model.id : undefined;\n if (!id) return null;\n\n const staticModel = this.getStaticModel(id);\n const inferredName =\n typeof model.name === 'string' && model.name\n ? model.name\n : staticModel?.name || id.replace(/^@cf\\//, '');\n const inferredDescription =\n typeof model.description === 'string' && model.description\n ? model.description\n : staticModel?.description;\n const contextLength =\n this.getContextLength(model.properties) ??\n staticModel?.contextLength;\n const iconSource = this.getModelIconSource(model, id);\n const executionModelId = this.getExecutionModelId(model, iconSource);\n\n const providerModel: ProviderModelInfo = {\n id,\n name: inferredName,\n description: inferredDescription,\n contextLength,\n iconId: this.getIcon(iconSource),\n slug: iconSource.replace(/^@cf\\//, ''),\n };\n\n CloudflareProvider.remoteModelCache.set(providerModel.id, providerModel);\n CloudflareProvider.remoteModelCache.set(executionModelId, providerModel);\n return providerModel;\n }\n\n private async fetchModelsPage(query: CloudflareModelsQuery = {}): Promise<CloudflareModelsPage> {\n const page = Math.max(1, query.page ?? 1);\n const perPage = Math.min(100, Math.max(1, query.perPage ?? CloudflareProvider.DEFAULT_PER_PAGE));\n const search = query.search?.trim();\n\n const url = new URL(this.resolveModelsUrl());\n url.searchParams.set('page', String(page));\n url.searchParams.set('per_page', String(perPage));\n url.searchParams.set('hide_experimental', 'true');\n if (search) {\n url.searchParams.set('search', search);\n }\n\n const response = await fetch(url, {\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n },\n });\n\n if (!response.ok) {\n throw await this.toHttpProviderError(response);\n }\n\n const data = await response.json() as CloudflareModelsApiResponse;\n const models = (data.result || [])\n .map((model) => this.toProviderModelInfo(model))\n .filter((model): model is ProviderModelInfo => model !== null)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n const resultInfo = data.result_info;\n const hasNextPage =\n typeof resultInfo?.total_pages === 'number'\n ? page < resultInfo.total_pages\n : models.length === perPage;\n\n return { models, hasNextPage };\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n try {\n const results: ProviderModelInfo[] = [];\n let page = 1;\n let hasNextPage = true;\n\n while (hasNextPage && page <= CloudflareProvider.MAX_FULL_LIST_PAGES) {\n const currentPage = await this.fetchModelsPage({\n search: filter,\n page,\n perPage: 100,\n });\n results.push(...currentPage.models);\n hasNextPage = currentPage.hasNextPage;\n page += 1;\n }\n\n return results;\n } catch (error) {\n console.error('Failed to fetch models from Cloudflare Workers AI, falling back to static catalog:', error);\n\n let models = STATIC_MODELS.map((model) => ({\n id: model.id,\n name: model.name,\n description: model.description,\n contextLength: model.contextLength,\n iconId: this.getIcon(model.id),\n slug: model.id.replace(/^@cf\\//, ''),\n })).sort((a, b) => a.name.localeCompare(b.name));\n\n if (filter) {\n const lower = filter.toLowerCase();\n models = models.filter(\n (model) =>\n model.id.toLowerCase().includes(lower) ||\n model.name.toLowerCase().includes(lower) ||\n model.description?.toLowerCase().includes(lower)\n );\n }\n\n return models;\n }\n }\n\n async getModelsPage(query: CloudflareModelsQuery = {}): Promise<CloudflareModelsPage> {\n try {\n return await this.fetchModelsPage(query);\n } catch (error) {\n console.error('Failed to fetch paginated models from Cloudflare Workers AI, falling back to static catalog:', error);\n\n const search = query.search?.toLowerCase();\n const page = Math.max(1, query.page ?? 1);\n const perPage = Math.min(100, Math.max(1, query.perPage ?? CloudflareProvider.DEFAULT_PER_PAGE));\n\n let models = STATIC_MODELS.map((model) => ({\n id: model.id,\n name: model.name,\n description: model.description,\n contextLength: model.contextLength,\n iconId: this.getIcon(model.id),\n slug: model.id.replace(/^@cf\\//, ''),\n }));\n\n if (search) {\n models = models.filter(\n (model) =>\n model.id.toLowerCase().includes(search) ||\n model.name.toLowerCase().includes(search) ||\n model.description?.toLowerCase().includes(search)\n );\n }\n\n models.sort((a, b) => a.name.localeCompare(b.name));\n\n const start = (page - 1) * perPage;\n const end = start + perPage;\n\n return {\n models: models.slice(start, end),\n hasNextPage: end < models.length,\n };\n }\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n const model = this.getStaticModel(modelId);\n if (model) {\n return { ...model.capabilities };\n }\n\n const cachedModel = CloudflareProvider.remoteModelCache.get(modelId);\n if (!cachedModel) {\n return null;\n }\n\n return {\n supportsImages: false,\n supportsToolCalls: false,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: cachedModel.contextLength,\n };\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n try {\n const response = await fetch(`${this.resolveBaseUrl()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config.apiKey}`,\n },\n body: JSON.stringify(buildChatParams(request)),\n signal: request.signal,\n });\n\n if (!response.ok) {\n throw await this.toHttpProviderError(response);\n }\n\n const data = await response.json() as CloudflareChatCompletionResponse;\n const transformed = transformChatResponse(data);\n const cost = calculateCloudflareUsageCost(request.model, transformed.usage);\n if (cost !== undefined) {\n transformed.usage.cost = cost;\n }\n return transformed;\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n try {\n const response = await fetch(`${this.resolveBaseUrl()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config.apiKey}`,\n },\n body: JSON.stringify({\n ...buildChatParams(request),\n stream: true,\n stream_options: { include_usage: true },\n }),\n signal: request.signal,\n });\n\n if (!response.ok) {\n throw await this.toHttpProviderError(response);\n }\n\n if (!response.body) {\n throw new ProviderError('Response body is missing', 'server_error', response.status);\n }\n\n const stream = parseChatSSEStream(response.body, createChatStreamState());\n const modelId = request.model;\n\n return {\n async *[Symbol.asyncIterator]() {\n for await (const chunk of stream) {\n if (chunk.type === 'finish') {\n const cost = calculateCloudflareUsageCost(modelId, chunk.usage);\n if (cost !== undefined) {\n chunk.usage.cost = cost;\n }\n }\n yield chunk;\n }\n },\n };\n } catch (error) {\n const providerError = this.toProviderError(error);\n return {\n async *[Symbol.asyncIterator]() {\n yield createChatErrorChunk(providerError);\n },\n };\n }\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n return {\n body: truncateChatBase64(buildChatParams(request)) as Record<string, unknown>,\n messagesPath: 'messages',\n metadata: {\n endpoint: `${this.resolveBaseUrl()}/chat/completions`,\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n };\n }\n\n private async toHttpProviderError(response: Response): Promise<ProviderError> {\n const errorText = await response.text();\n let message = `Cloudflare Workers AI error: ${response.status}`;\n\n try {\n const errorJson = JSON.parse(errorText) as {\n error?: { message?: string };\n errors?: Array<{ message?: string }>;\n result?: { error?: string };\n };\n message =\n errorJson.error?.message ||\n errorJson.errors?.[0]?.message ||\n errorJson.result?.error ||\n message;\n } catch {\n message = errorText || message;\n }\n\n if (response.status === 429) {\n const retryAfter = response.headers.get('retry-after');\n return new ProviderError(message, 'rate_limit', response.status, retryAfter ? Number(retryAfter) : undefined);\n }\n if (response.status === 401 || response.status === 403) {\n return new ProviderError(message, 'auth_error', response.status);\n }\n if (response.status >= 400 && response.status < 500) {\n return new ProviderError(message, 'invalid_request', response.status);\n }\n if (response.status >= 500) {\n return new ProviderError(message, 'server_error', response.status);\n }\n return new ProviderError(message, 'unknown', response.status);\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) return error;\n if (error instanceof DOMException && error.name === 'AbortError') {\n return new ProviderError('Request aborted', 'timeout');\n }\n if (error instanceof Error) {\n return new ProviderError(error.message, 'unknown');\n }\n return new ProviderError(String(error), 'unknown');\n }\n}\n","import type {\n ProviderRequest,\n ProviderResponse,\n ProviderMessage,\n ProviderTool,\n ProviderToolCallPart,\n ProviderFinishReason,\n ProviderUsage,\n ProviderStreamChunk,\n ContentPart,\n} from '@standardagents/spec';\n\nexport type CloudflareChatContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: { url: string; detail?: 'auto' | 'low' | 'high' } };\n\nexport type CloudflareChatMessage =\n | { role: 'system'; content: string }\n | { role: 'user'; content: string | CloudflareChatContentPart[] }\n | {\n role: 'assistant';\n content?: string | null;\n tool_calls?: CloudflareChatToolCall[];\n reasoning?: string | null;\n }\n | { role: 'tool'; tool_call_id: string; content: string };\n\nexport interface CloudflareChatToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface CloudflareChatTool {\n type: 'function';\n function: {\n name: string;\n description?: string;\n parameters?: Record<string, unknown>;\n strict?: boolean;\n };\n}\n\nexport type CloudflareChatToolChoice =\n | 'auto'\n | 'none'\n | 'required'\n | { type: 'function'; function: { name: string } };\n\nexport interface CloudflareChatCompletionRequest {\n model: string;\n messages: CloudflareChatMessage[];\n tools?: CloudflareChatTool[];\n tool_choice?: CloudflareChatToolChoice;\n parallel_tool_calls?: boolean;\n max_tokens?: number;\n temperature?: number;\n top_p?: number;\n stop?: string[];\n stream?: boolean;\n stream_options?: { include_usage?: boolean };\n seed?: number;\n user?: string;\n logprobs?: boolean;\n top_logprobs?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n response_format?:\n | { type: 'json_object' }\n | { type: 'json_schema'; json_schema: { name: string; schema: Record<string, unknown>; strict?: boolean } };\n [key: string]: unknown;\n}\n\nexport interface CloudflareChatCompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\n\nexport interface CloudflareChatCompletionResponse {\n id: string;\n model?: string;\n choices: Array<{\n index: number;\n message: {\n role: 'assistant';\n content: string | null;\n reasoning?: string | null;\n tool_calls?: CloudflareChatToolCall[];\n };\n finish_reason: string;\n }>;\n usage?: CloudflareChatCompletionUsage;\n}\n\nexport interface CloudflareChatStreamChunk {\n id?: string;\n model?: string;\n choices?: Array<{\n index: number;\n delta: {\n role?: string;\n content?: string | null;\n reasoning?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string | null;\n }>;\n usage?: CloudflareChatCompletionUsage;\n}\n\nexport function transformChatContentPart(part: ContentPart): CloudflareChatContentPart {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n\n if (part.type === 'image') {\n const data = part.data || '';\n return {\n type: 'image_url',\n image_url: {\n url: data.startsWith('data:') ? data : `data:${part.mediaType || 'image/png'};base64,${data}`,\n detail: part.detail || 'auto',\n },\n };\n }\n\n if (part.type === 'image_url') {\n return {\n type: 'image_url',\n image_url: {\n url: part.image_url?.url || '',\n detail: part.image_url?.detail || 'auto',\n },\n };\n }\n\n return {\n type: 'text',\n text: `[File: ${part.filename || 'file'}]`,\n };\n}\n\nfunction transformChatMessageContent(content: string | ContentPart[]): string | CloudflareChatContentPart[] {\n return typeof content === 'string' ? content : content.map(transformChatContentPart);\n}\n\nfunction transformChatAssistantMessage(\n msg: ProviderMessage & { role: 'assistant' }\n): CloudflareChatMessage {\n const transformed: CloudflareChatMessage & { role: 'assistant' } = {\n role: 'assistant',\n content: msg.content || null,\n };\n\n if (msg.toolCalls?.length) {\n transformed.tool_calls = msg.toolCalls.map((toolCall) => ({\n id: toolCall.id,\n type: 'function',\n function: {\n name: toolCall.name,\n arguments:\n typeof toolCall.arguments === 'string'\n ? toolCall.arguments\n : JSON.stringify(toolCall.arguments),\n },\n }));\n }\n\n if (msg.reasoning) {\n transformed.reasoning = msg.reasoning;\n }\n\n return transformed;\n}\n\nfunction transformChatToolMessage(\n msg: ProviderMessage & { role: 'tool' }\n): { toolMessage: CloudflareChatMessage & { role: 'tool' }; syntheticUserMessage?: CloudflareChatMessage & { role: 'user' } } {\n let output = '';\n\n if (typeof msg.content === 'string') {\n output = msg.content;\n } else if ('type' in msg.content) {\n output =\n msg.content.type === 'text'\n ? msg.content.text\n : msg.content.type === 'error'\n ? `Error: ${msg.content.error}`\n : JSON.stringify(msg.content);\n } else {\n output = JSON.stringify(msg.content);\n }\n\n const imageAttachments = msg.attachments?.filter((attachment) => attachment.type === 'image' && attachment.data) || [];\n const toolMessage: CloudflareChatMessage & { role: 'tool' } = {\n role: 'tool',\n tool_call_id: msg.toolCallId,\n content: output || (imageAttachments.length > 0 ? 'Success' : ''),\n };\n\n if (!imageAttachments.length) {\n return { toolMessage };\n }\n\n return {\n toolMessage,\n syntheticUserMessage: {\n role: 'user',\n content: imageAttachments.map((attachment) => ({\n type: 'image_url',\n image_url: {\n url: attachment.data?.startsWith('data:')\n ? attachment.data\n : `data:${attachment.mediaType || 'image/png'};base64,${attachment.data}`,\n detail: 'auto',\n },\n })),\n },\n };\n}\n\nexport function transformChatMessages(messages: ProviderMessage[]): CloudflareChatMessage[] {\n const result: CloudflareChatMessage[] = [];\n\n for (const msg of messages) {\n if (msg.role === 'system') {\n result.push({ role: 'system', content: msg.content });\n } else if (msg.role === 'user') {\n result.push({ role: 'user', content: transformChatMessageContent(msg.content) });\n } else if (msg.role === 'assistant') {\n result.push(transformChatAssistantMessage(msg));\n } else if (msg.role === 'tool') {\n const transformed = transformChatToolMessage(msg);\n result.push(transformed.toolMessage);\n if (transformed.syntheticUserMessage) {\n result.push(transformed.syntheticUserMessage);\n }\n }\n }\n\n return result;\n}\n\nfunction transformChatTools(tools: ProviderTool[]): CloudflareChatTool[] {\n return tools.map((tool) => {\n const inputParams = tool.function.parameters as Record<string, unknown> | null | undefined;\n const parameters = inputParams && typeof inputParams === 'object'\n ? {\n ...inputParams,\n additionalProperties: false,\n }\n : {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false,\n };\n\n return {\n type: 'function',\n function: {\n name: tool.function.name,\n description: tool.function.description || undefined,\n parameters,\n strict: true,\n },\n };\n });\n}\n\nfunction transformChatToolChoice(toolChoice?: ProviderRequest['toolChoice']): CloudflareChatToolChoice | undefined {\n if (!toolChoice) return undefined;\n if (toolChoice === 'auto' || toolChoice === 'none' || toolChoice === 'required') return toolChoice;\n return { type: 'function', function: { name: toolChoice.name } };\n}\n\nfunction mapFinishReason(reason: string | null | undefined): ProviderFinishReason {\n if (reason === 'tool_calls') return 'tool_calls';\n if (reason === 'length') return 'length';\n return 'stop';\n}\n\nfunction transformUsage(usage?: CloudflareChatCompletionUsage | null): ProviderUsage {\n return {\n promptTokens: usage?.prompt_tokens || 0,\n completionTokens: usage?.completion_tokens || 0,\n totalTokens: usage?.total_tokens || 0,\n reasoningTokens: usage?.completion_tokens_details?.reasoning_tokens,\n };\n}\n\nfunction transformToolCalls(toolCalls?: CloudflareChatToolCall[]): ProviderToolCallPart[] | undefined {\n if (!toolCalls?.length) return undefined;\n\n return toolCalls.map((toolCall) => ({\n id: toolCall.id,\n name: toolCall.function.name,\n arguments: JSON.parse(toolCall.function.arguments),\n }));\n}\n\nexport function transformChatResponse(response: CloudflareChatCompletionResponse): ProviderResponse {\n const choice = response.choices?.[0];\n\n return {\n content: choice?.message.content || null,\n reasoning: choice?.message.reasoning || null,\n toolCalls: transformToolCalls(choice?.message.tool_calls),\n finishReason: mapFinishReason(choice?.finish_reason),\n usage: transformUsage(response.usage),\n metadata: {\n provider: 'cloudflare',\n responseId: response.id,\n model: response.model,\n },\n };\n}\n\nexport interface CloudflareChatStreamState {\n content: string;\n reasoning: string;\n toolCalls: Map<number, { id?: string; name?: string; arguments: string }>;\n finishReason?: ProviderFinishReason;\n usage?: ProviderUsage;\n}\n\nexport function createChatStreamState(): CloudflareChatStreamState {\n return {\n content: '',\n reasoning: '',\n toolCalls: new Map(),\n };\n}\n\nexport function transformChatStreamChunk(\n chunk: CloudflareChatStreamChunk,\n state: CloudflareChatStreamState\n): ProviderStreamChunk[] {\n const output: ProviderStreamChunk[] = [];\n\n if (chunk.usage) {\n state.usage = transformUsage(chunk.usage);\n }\n\n for (const choice of chunk.choices || []) {\n if (choice.delta.content) {\n state.content += choice.delta.content;\n output.push({ type: 'content-delta', delta: choice.delta.content });\n }\n\n if (choice.delta.reasoning) {\n state.reasoning += choice.delta.reasoning;\n output.push({ type: 'reasoning-delta', delta: choice.delta.reasoning });\n }\n\n for (const toolCall of choice.delta.tool_calls || []) {\n const current = state.toolCalls.get(toolCall.index) || { arguments: '' };\n if (toolCall.id) current.id = toolCall.id;\n if (toolCall.function?.name) current.name = toolCall.function.name;\n if (toolCall.function?.arguments) current.arguments += toolCall.function.arguments;\n state.toolCalls.set(toolCall.index, current);\n\n if (toolCall.id && toolCall.function?.name) {\n output.push({\n type: 'tool-call-start',\n id: toolCall.id,\n name: toolCall.function.name,\n });\n }\n }\n\n if (choice.finish_reason) {\n state.finishReason = mapFinishReason(choice.finish_reason);\n }\n }\n\n return output;\n}\n\nexport function parseChatStreamEvent(jsonStr: string): CloudflareChatStreamChunk | null {\n try {\n return JSON.parse(jsonStr) as CloudflareChatStreamChunk;\n } catch {\n return null;\n }\n}\n\nfunction parseToolArguments(argumentsJson: string): Record<string, unknown> {\n try {\n const parsed = argumentsJson ? JSON.parse(argumentsJson) : {};\n return parsed && typeof parsed === 'object' ? parsed as Record<string, unknown> : {};\n } catch {\n return {};\n }\n}\n\nexport async function* parseChatSSEStream(\n stream: ReadableStream<Uint8Array>,\n state: CloudflareChatStreamState\n): AsyncGenerator<ProviderStreamChunk> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n while (true) {\n const separatorIndex = buffer.indexOf('\\n\\n');\n if (separatorIndex === -1) break;\n\n const rawEvent = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n\n const dataLines = rawEvent\n .split('\\n')\n .filter((line) => line.startsWith('data:'))\n .map((line) => line.slice(5).trim());\n\n if (!dataLines.length) continue;\n const data = dataLines.join('\\n');\n\n if (data === '[DONE]') {\n if (state.content) yield { type: 'content-done' };\n if (state.reasoning) yield { type: 'reasoning-done' };\n for (const toolCall of state.toolCalls.values()) {\n if (toolCall.id) {\n yield {\n type: 'tool-call-done',\n id: toolCall.id,\n arguments: parseToolArguments(toolCall.arguments),\n };\n }\n }\n yield {\n type: 'finish',\n finishReason: state.finishReason || 'stop',\n usage: state.usage || {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n },\n };\n return;\n }\n\n const parsed = parseChatStreamEvent(data);\n if (!parsed) continue;\n\n for (const chunk of transformChatStreamChunk(parsed, state)) {\n yield chunk;\n }\n }\n }\n}\n\nexport function createChatErrorChunk(error: unknown): ProviderStreamChunk {\n return {\n type: 'error',\n error: error instanceof Error ? error.message : String(error),\n code: 'unknown',\n };\n}\n\nexport function truncateChatBase64(value: unknown): unknown {\n if (typeof value === 'string' && value.startsWith('data:')) {\n const [prefix, payload] = value.split(',', 2);\n return payload ? `${prefix},${payload.slice(0, 50)}...` : value;\n }\n\n if (typeof value === 'string' && value.length > 120 && !value.includes(' ')) {\n return `${value.slice(0, 50)}...`;\n }\n\n if (Array.isArray(value)) {\n return value.map(truncateChatBase64);\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, nestedValue]) => [key, truncateChatBase64(nestedValue)])\n );\n }\n\n return value;\n}\n\nexport function buildChatParams(request: ProviderRequest): CloudflareChatCompletionRequest {\n const providerOptions = request.providerOptions || {};\n const params: CloudflareChatCompletionRequest = {\n model: request.model,\n messages: transformChatMessages(request.messages),\n };\n\n if (request.tools?.length) params.tools = transformChatTools(request.tools);\n if (request.toolChoice) params.tool_choice = transformChatToolChoice(request.toolChoice);\n if (request.parallelToolCalls !== undefined) params.parallel_tool_calls = request.parallelToolCalls;\n if (request.maxOutputTokens !== undefined) params.max_tokens = request.maxOutputTokens;\n if (request.temperature !== undefined) params.temperature = request.temperature;\n if (request.topP !== undefined) params.top_p = request.topP;\n if (request.stopSequences?.length) params.stop = request.stopSequences;\n if (providerOptions.seed !== undefined) params.seed = providerOptions.seed as number;\n if (providerOptions.user !== undefined) params.user = providerOptions.user as string;\n if (providerOptions.logprobs !== undefined) params.logprobs = providerOptions.logprobs as boolean;\n if (providerOptions.top_logprobs !== undefined) params.top_logprobs = providerOptions.top_logprobs as number;\n if (providerOptions.frequency_penalty !== undefined) params.frequency_penalty = providerOptions.frequency_penalty as number;\n if (providerOptions.presence_penalty !== undefined) params.presence_penalty = providerOptions.presence_penalty as number;\n\n if (request.responseFormat?.type === 'json') {\n params.response_format = request.responseFormat.schema\n ? {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n schema: request.responseFormat.schema,\n strict: true,\n },\n }\n : { type: 'json_object' };\n }\n\n return params;\n}\n","import CLOUDFLARE_ICON from './Cloudflare.png';\nimport AI4BHARAT_ICON from './vendor-icons/ai4bharat.svg';\nimport AISINGAPORE_ICON from './vendor-icons/aisingapore.svg';\nimport BAAI_ICON from './vendor-icons/baai.svg';\nimport BLACK_FOREST_LABS_ICON from './vendor-icons/blackforestlabs.svg';\nimport BYTEDANCE_ICON from './vendor-icons/bytedance.svg';\nimport DEEPGRAM_ICON from './vendor-icons/deepgram.svg';\nimport DEFOG_ICON from './vendor-icons/defog.svg';\nimport FBLGIT_ICON from './vendor-icons/fblgit.svg';\nimport GOOGLE_ICON_FILE from './vendor-icons/google.svg';\nimport HUGGINGFACE_ICON from './vendor-icons/huggingface.svg';\nimport IBM_ICON from './vendor-icons/ibm.svg';\nimport LEONARDO_ICON from './vendor-icons/leonardo.svg';\nimport LLAVA_HF_ICON from './vendor-icons/llava-hf.svg';\nimport LYKON_ICON from './vendor-icons/lykon.svg';\nimport META_ICON_FILE from './vendor-icons/meta.svg';\nimport MICROSOFT_ICON from './vendor-icons/microsoft.svg';\nimport MISTRALAI_ICON_FILE from './vendor-icons/mistralai.svg';\nimport MOONSHOT_AI_ICON from './vendor-icons/moonshotai.svg';\nimport MYSHELL_AI_ICON from './vendor-icons/myshell-ai.svg';\nimport NVIDIA_ICON from './vendor-icons/nvidia.svg';\nimport OPENAI_ICON_FILE from './vendor-icons/openai.svg';\nimport OPENCHAT_ICON from './vendor-icons/openchat.svg';\nimport PFNET_ICON from './vendor-icons/pfnet.svg';\nimport PIPECAT_AI_ICON from './vendor-icons/pipecat-ai.svg';\nimport QWEN_ICON_FILE from './vendor-icons/qwen.svg';\nimport RUNWAYML_ICON from './vendor-icons/runwayml.svg';\nimport STABILITY_AI_ICON from './vendor-icons/stabilityai.svg';\nimport THEBLOKE_ICON from './vendor-icons/thebloke.svg';\nimport TIIUAE_ICON from './vendor-icons/tiiuae.svg';\nimport TINYLLAMA_ICON from './vendor-icons/tinyllama.svg';\nimport UNUM_ICON from './vendor-icons/unum.svg';\nimport ZAI_ORG_ICON_FILE from './vendor-icons/zai-org.svg';\nconst OPENAI_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><rect width=\"48\" height=\"48\" rx=\"24\" fill=\"white\"/><path d=\"M19.3418 18.5599V14.7599C19.3418 14.4399 19.4608 14.1998 19.7382 14.04L27.3102 9.63997C28.3409 9.03999 29.5699 8.76014 30.8383 8.76014C35.5954 8.76014 38.6085 12.4802 38.6085 16.4401C38.6085 16.72 38.6085 17.04 38.5687 17.3601L30.7194 12.72C30.2437 12.4401 29.7678 12.4401 29.2922 12.72L19.3418 18.5599ZM37.0226 33.36V24.2799C37.0226 23.7197 36.7846 23.3197 36.309 23.0398L26.3586 17.1998L29.6093 15.3197C29.8868 15.1599 30.1247 15.1599 30.4022 15.3197L37.9741 19.7197C40.1547 20.9999 41.6213 23.7197 41.6213 26.3596C41.6213 29.3995 39.8375 32.1999 37.0226 33.36ZM17.0029 25.3601L13.7522 23.4402C13.4748 23.2804 13.3557 23.0402 13.3557 22.7202V13.9203C13.3557 9.64039 16.6065 6.40016 21.0069 6.40016C22.6722 6.40016 24.2179 6.96029 25.5265 7.96025L17.7168 12.5204C17.2412 12.8003 17.0033 13.2002 17.0033 13.7605L17.0029 25.3601ZM24 29.44L19.3418 26.8001V21.2003L24 18.5604L28.6578 21.2003V26.8001L24 29.44ZM26.993 41.6002C25.3278 41.6002 23.7821 41.04 22.4735 40.0402L30.2831 35.4799C30.7588 35.2001 30.9967 34.8001 30.9967 34.2399V22.6399L34.2873 24.5598C34.5646 24.7196 34.6837 24.9597 34.6837 25.2798V34.0797C34.6837 38.3596 31.3931 41.6002 26.993 41.6002ZM17.5975 32.6802L10.0255 28.2803C7.84493 27.0001 6.37833 24.2803 6.37833 21.6404C6.37833 18.5604 8.20193 15.8004 11.0164 14.6403V23.7602C11.0164 24.3204 11.2544 24.7204 11.73 25.0003L21.641 30.8001L18.3902 32.6802C18.1129 32.84 17.8749 32.84 17.5975 32.6802ZM17.1617 39.2402C12.682 39.2402 9.39151 35.8402 9.39151 31.6401C9.39151 31.3201 9.43125 31.0001 9.47066 30.68L17.2803 35.2402C17.7559 35.5201 18.2319 35.5201 18.7074 35.2402L28.6578 29.4404V33.2404C28.6578 33.5605 28.5388 33.8005 28.2614 33.9604L20.6894 38.3604C19.6586 38.9603 18.4301 39.2402 17.1617 39.2402ZM26.993 44C31.7899 44 35.7936 40.5601 36.7057 36C41.1457 34.8399 44 30.6399 44 26.36C44 23.5598 42.8108 20.8401 40.6701 18.88C40.8683 18.0399 40.9872 17.1998 40.9872 16.3602C40.9872 10.6403 36.3885 6.35998 31.0763 6.35998C30.0062 6.35998 28.9754 6.51979 27.9446 6.88001C26.1604 5.11992 23.7025 4 21.0069 4C16.2101 4 12.2064 7.4398 11.2943 12C6.8543 13.1601 4 17.3601 4 21.6399C4 24.4401 5.18916 27.1599 7.32995 29.1199C7.13174 29.96 7.01277 30.8001 7.01277 31.6398C7.01277 37.3597 11.6114 41.6399 16.9236 41.6399C17.9938 41.6399 19.0246 41.4801 20.0554 41.1199C21.8392 42.88 24.2971 44 26.993 44Z\" fill=\"black\"/></svg>`;\nconst META_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" width=\"48\" height=\"48\" fill=\"none\"><defs><linearGradient id=\"meta-grad\" x1=\"16\" y1=\"61\" x2=\"84\" y2=\"61\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#0064E1\"/><stop offset=\".4\" stop-color=\"#0064E1\"/><stop offset=\".83\" stop-color=\"#0073EE\"/><stop offset=\"1\" stop-color=\"#0082FB\"/></linearGradient></defs><path d=\"M9 60.5c0 5.3 1.1 9.3 2.8 11.9 2 3.2 5 4.6 8 4.6 3.9 0 7.5-1 14.3-10.5 5.5-7.7 12.1-18.4 16.5-25.2l7.5-11.5c5.2-7.9 11.1-16.8 18-22.7C81.7 2.3 87.7-.5 93.7-.5c10.1 0 19.6 5.8 26.9 16.8 8 12 11.9 27.2 11.9 42.8 0 9.3-1.8 16.1-4.9 21.4-2.9 5.2-8.8 10.4-18.6 10.4V76c8.4 0 10.5-7.8 10.5-16.7 0-12.6-3-26.7-9.4-36.8-4.6-7.2-10.6-11.4-17.1-11.4-7 0-12.9 5.1-19.1 14.7-3.4 5.1-6.9 11.3-10.9 18.3l-4.3 7.7c-8.7 15.5-10.9 19-15.2 24.8-7.6 10.2-14.1 14.1-22.7 14.1-10.2 0-16.6-4.4-20.6-11.1C10.6 74.8 9 67.6 9 60.5z\" transform=\"translate(0 4) scale(.56)\" fill=\"url(#meta-grad)\"/><path d=\"M3 16.8C9.8 6.2 19.7-1.2 31 .0c6.6 0 13.1 1.9 19.9 7.4 7.4 6.1 15.4 16 25.2 32.6l3.5 5.9c8.5 14.3 13.4 21.7 16.3 25.2 3.7 4.5 6.2 5.7 9.6 5.7 8.4 0 10.5-7.8 10.5-16.7l13.1-.4c0 9.3-1.8 16.1-4.9 21.4-2.9 5.2-8.8 10.4-18.6 10.4-6.1 0-11.5-1.4-17.5-7-4.6-4.4-10-12.1-14.1-19.1L61 46.2c-6.2-10.4-11.9-18.2-15.2-21.8-3.5-3.7-8.1-8.4-15.4-8.4-5.9 0-11 4.1-15 10.8z\" transform=\"translate(4 8) scale(.56)\" fill=\"url(#meta-grad)\"/></svg>`;\nconst GOOGLE_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\" width=\"48\" height=\"48\"><rect width=\"16\" height=\"16\" fill=\"white\"/><path fill=\"#4285F4\" d=\"M14.9 8.161c0-.476-.039-.954-.121-1.422h-6.64v2.695h3.802a3.24 3.24 0 01-1.407 2.127v1.75h2.269c1.332-1.22 2.097-3.02 2.097-5.15z\"/><path fill=\"#34A853\" d=\"M8.14 15c1.898 0 3.499-.62 4.665-1.69l-2.268-1.749c-.631.427-1.446.669-2.395.669-1.836 0-3.393-1.232-3.952-2.888H1.85v1.803A7.044 7.044 0 008.14 15z\"/><path fill=\"#FBBC04\" d=\"M4.187 9.342a4.17 4.17 0 010-2.68V4.859H1.849a6.97 6.97 0 000 6.286l2.338-1.803z\"/><path fill=\"#EA4335\" d=\"M8.14 3.77a3.837 3.837 0 012.7 1.05l2.01-1.999a6.786 6.786 0 00-4.71-1.82 7.042 7.042 0 00-6.29 3.858L4.186 6.66c.556-1.658 2.116-2.89 3.952-2.89z\"/></svg>`;\nconst ZAI_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><rect width=\"48\" height=\"48\" rx=\"4\" fill=\"#2D2D2D\"/><path d=\"M35 10H13v4h14L13 34v4h22v-4H21l14-20V10z\" fill=\"white\"/></svg>`;\nconst DEEPSEEK_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><rect width=\"48\" height=\"48\" fill=\"white\"/><path d=\"M14 10c7 0 14.2 5.8 18 11.8 1.1 1.7 1.1 3.8 0 5.5C28.2 33.2 21 39 14 39 8.5 39 4 34.1 4 28.5S8.5 18 14 18c3.3 0 6 2.7 6 6s-2.7 6-6 6c-1.7 0-3-1.3-3-3s1.3-3 3-3h1\" stroke=\"#4D6BFE\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M25 12c4.7 1.2 9.1 4.5 13 9.8\" stroke=\"#4D6BFE\" stroke-width=\"4\" stroke-linecap=\"round\"/></svg>`;\nconst ALIBABA_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><rect width=\"48\" height=\"48\" fill=\"#FF5A00\"/><path d=\"M31.5 12c3 .2 6.2.7 8.6 2.7 1.9 1.6 2.7 4.2 2.3 6.6-.4 1.8-1.2 3.4-2.1 5-1.8 3.1-4 6-6.1 8.9-.4.5-.7 1.1-.6 1.7 0 .5.4.9.9 1.1.9.4 1.8.3 2.7.2 2.9-.3 5.6-1.2 8.4-2.1.2-.1.3.1.4.2-2.9 1.9-6 3.6-9.3 4.8-1.8.6-3.7 1.2-5.7 1-1-.1-2-.7-2.4-1.7-.4-1.3-.2-2.8.3-4 .9-1.9 2.2-3.6 3.5-5.3 2.1-2.8 4.3-5.5 6-8.6.6-1.1 1.1-2.4.6-3.6-.5-1.1-1.6-1.8-2.7-2.3-1.9-.8-3.9-1.4-5.9-1.9l.9.6c.7.5 1.4 1.1 2.1 1.6-2.6.5-5.3 1-7.9 1.7-3.9 1-7.8 2.3-11.6 3.7.4.7.7 1.5 1.1 2.2-.9 1-1.7 1.9-2.6 2.9 2.1.6 4.3.7 6.4.2 1.8-.4 3.5-1.3 4.9-2.5-.4-.5-.9-.8-1.4-1.2 1.7 0 3.2 1.5 3.2 3.2l-1 .1c-.1-.4-.2-.7-.3-1.1-1.9 1.7-4.4 2.8-6.9 3.1-2.2.3-4.5-.1-6.7-.8.1 1.3.3 2.6.4 3.9-1.2.5-2.3 1.1-3.3 2-.8.7-1.6 1.5-1.9 2.5-.3.9.2 1.9 1 2.4 1 .6 2.1.9 3.2 1 1.5.2 3 .2 4.4.1 2.9-.2 5.8-.8 8.6-1.5.3-.1.4.4.1.4-2.3 1.2-4.6 2.1-7.1 2.8-2.3.6-4.7.9-7.1 1-2.4-.1-5-.5-7-1.9-1.4-1.2-2.2-3-2.2-4.8v-.1c0-1.9.7-3.8 1.6-5.5 1.2-2.4 2.8-4.6 4.6-6.5 3.1-3.4 7-6.1 11.2-8 4.4-2 9-3.4 13.8-3.7z\" fill=\"white\"/></svg>`;\nconst MISTRAL_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><rect width=\"48\" height=\"48\" fill=\"#FF7000\"/><path d=\"M10 10h8v8h-8zM18 10h4v8h-4zM26 10h4v8h-4zM30 10h8v8h-8zM10 18h8v4h-8zM30 18h8v4h-8zM10 22h8v4h-8zM18 22h12v4H18zM30 22h8v4h-8zM10 26h8v4h-8zM30 26h8v4h-8zM10 30h8v8h-8zM18 30h4v8h-4zM26 30h4v8h-4zM30 30h8v8h-8z\" fill=\"white\"/></svg>`;\n\nfunction svgToDataUri(svg: string): string {\n const encoded = encodeURIComponent(svg)\n .replace(/'/g, '%27')\n .replace(/\"/g, '%22');\n return `data:image/svg+xml,${encoded}`;\n}\n\nfunction getVendorSegment(modelId?: string): string | undefined {\n const normalized = (modelId || '').toLowerCase();\n if (!normalized) return undefined;\n if (normalized.startsWith('@cf/')) {\n return normalized.split('/')[1];\n }\n if (normalized.startsWith('@')) {\n return normalized.split('/')[1];\n }\n if (normalized.includes('/')) {\n return normalized.split('/')[0];\n }\n return undefined;\n}\n\nexport function getCloudflareIconDataUri(): string {\n return CLOUDFLARE_ICON;\n}\n\nexport function getCloudflareModelIconDataUri(modelId?: string): string | undefined {\n const vendor = getVendorSegment(modelId);\n if (!vendor) return undefined;\n if (vendor === 'meta' || vendor === 'meta-llama' || vendor === 'facebook') return META_ICON_FILE;\n if (vendor === 'openai') return OPENAI_ICON_FILE;\n if (vendor === 'qwen' || vendor === 'alibaba') return QWEN_ICON_FILE;\n if (vendor === 'zhipu-ai' || vendor === 'z-ai' || vendor === 'zai-org') return ZAI_ORG_ICON_FILE;\n if (vendor === 'google') return GOOGLE_ICON_FILE;\n if (vendor === 'deepseek-ai' || vendor === 'deepseek') return svgToDataUri(DEEPSEEK_ICON);\n if (vendor === 'mistral' || vendor === 'mistralai') return MISTRALAI_ICON_FILE;\n if (vendor === 'ai4bharat') return AI4BHARAT_ICON;\n if (vendor === 'aisingapore') return AISINGAPORE_ICON;\n if (vendor === 'baai') return BAAI_ICON;\n if (vendor === 'nvidia') return NVIDIA_ICON;\n if (vendor === 'black-forest-labs' || vendor === 'blackforestlabs' || vendor === 'bfl') return BLACK_FOREST_LABS_ICON;\n if (vendor === 'bytedance') return BYTEDANCE_ICON;\n if (vendor === 'deepgram') return DEEPGRAM_ICON;\n if (vendor === 'defog') return DEFOG_ICON;\n if (vendor === 'fblgit') return FBLGIT_ICON;\n if (vendor === 'ibm-granite') return IBM_ICON;\n if (vendor === 'ibm') return IBM_ICON;\n if (vendor === 'leonardo' || vendor === 'leonardo-ai') return LEONARDO_ICON;\n if (vendor === 'llava-hf') return LLAVA_HF_ICON;\n if (vendor === 'lykon') return LYKON_ICON;\n if (vendor === 'microsoft') return MICROSOFT_ICON;\n if (vendor === 'moonshotai' || vendor === 'moonshot-ai' || vendor === 'moonshot') return MOONSHOT_AI_ICON;\n if (vendor === 'myshell-ai') return MYSHELL_AI_ICON;\n if (vendor === 'openchat') return OPENCHAT_ICON;\n if (vendor === 'pfnet') return PFNET_ICON;\n if (vendor === 'pipecat-ai') return PIPECAT_AI_ICON;\n if (vendor === 'runwayml') return RUNWAYML_ICON;\n if (vendor === 'stability-ai' || vendor === 'stabilityai') return STABILITY_AI_ICON;\n if (vendor === 'thebloke') return THEBLOKE_ICON;\n if (vendor === 'tiiuae') return TIIUAE_ICON;\n if (vendor === 'tinyllama') return TINYLLAMA_ICON;\n if (vendor === 'unum') return UNUM_ICON;\n if (vendor === 'huggingface' || vendor === 'hugging-face') return HUGGINGFACE_ICON;\n return undefined;\n}\n","import type { ProviderUsage } from '@standardagents/spec';\n\nexport interface CloudflareModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst MODEL_PRICING: Record<string, CloudflareModelPricing> = {\n '@cf/meta/llama-3.2-1b-instruct': { inputPerMillion: 0.027, outputPerMillion: 0.201 },\n '@cf/meta/llama-3.2-3b-instruct': { inputPerMillion: 0.051, outputPerMillion: 0.335 },\n '@cf/meta/llama-3.1-8b-instruct-fp8-fast': { inputPerMillion: 0.045, outputPerMillion: 0.384 },\n '@cf/meta/llama-3.2-11b-vision-instruct': { inputPerMillion: 0.049, outputPerMillion: 0.676 },\n '@cf/meta/llama-3.1-70b-instruct-fp8-fast': { inputPerMillion: 0.293, outputPerMillion: 2.253 },\n '@cf/meta/llama-3.3-70b-instruct-fp8-fast': { inputPerMillion: 0.293, outputPerMillion: 2.253 },\n '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b': { inputPerMillion: 0.497, outputPerMillion: 4.881 },\n '@cf/mistral/mistral-7b-instruct-v0.1': { inputPerMillion: 0.11, outputPerMillion: 0.19 },\n '@cf/mistralai/mistral-small-3.1-24b-instruct': { inputPerMillion: 0.351, outputPerMillion: 0.555 },\n '@cf/meta/llama-3.1-8b-instruct': { inputPerMillion: 0.282, outputPerMillion: 0.827 },\n '@cf/meta/llama-3.1-8b-instruct-fp8': { inputPerMillion: 0.152, outputPerMillion: 0.287 },\n '@cf/meta/llama-3.1-8b-instruct-awq': { inputPerMillion: 0.123, outputPerMillion: 0.266 },\n '@cf/meta/llama-3-8b-instruct': { inputPerMillion: 0.282, outputPerMillion: 0.827 },\n '@cf/meta/llama-3-8b-instruct-awq': { inputPerMillion: 0.123, outputPerMillion: 0.266 },\n '@cf/meta/llama-2-7b-chat-fp16': { inputPerMillion: 0.556, outputPerMillion: 6.667 },\n '@cf/meta/llama-guard-3-8b': { inputPerMillion: 0.484, outputPerMillion: 0.03 },\n '@cf/meta/llama-4-scout-17b-16e-instruct': { inputPerMillion: 0.27, outputPerMillion: 0.85 },\n '@cf/google/gemma-3-12b-it': { inputPerMillion: 0.345, outputPerMillion: 0.556 },\n '@cf/qwen/qwq-32b': { inputPerMillion: 0.66, outputPerMillion: 1.0 },\n '@cf/qwen/qwen2.5-coder-32b-instruct': { inputPerMillion: 0.66, outputPerMillion: 1.0 },\n '@cf/qwen/qwen3-30b-a3b-fp8': { inputPerMillion: 0.051, outputPerMillion: 0.335 },\n '@cf/openai/gpt-oss-120b': { inputPerMillion: 0.35, outputPerMillion: 0.75 },\n '@cf/openai/gpt-oss-20b': { inputPerMillion: 0.2, outputPerMillion: 0.3 },\n '@cf/aisingapore/gemma-sea-lion-v4-27b-it': { inputPerMillion: 0.351, outputPerMillion: 0.555 },\n '@cf/ibm-granite/granite-4.0-h-micro': { inputPerMillion: 0.017, outputPerMillion: 0.112 },\n '@cf/zai-org/glm-4.7-flash': { inputPerMillion: 0.06, outputPerMillion: 0.4 },\n '@cf/nvidia/nemotron-3-120b-a12b': { inputPerMillion: 0.5, outputPerMillion: 1.5 },\n '@cf/moonshotai/kimi-k2.5': { inputPerMillion: 0.6, cachedInputPerMillion: 0.1, outputPerMillion: 3.0 },\n};\n\nfunction normalizeModelId(modelId: string): string {\n const trimmed = modelId.trim();\n if (trimmed.startsWith('@cf/')) return trimmed;\n return `@cf/${trimmed.replace(/^@cf\\//, '')}`;\n}\n\nexport function getCloudflareModelPricing(modelId: string): CloudflareModelPricing | undefined {\n return MODEL_PRICING[normalizeModelId(modelId)];\n}\n\nexport function calculateCloudflareUsageCost(\n modelId: string,\n usage: Pick<ProviderUsage, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getCloudflareModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n\n const inputCost = (uncachedPromptTokens / 1_000_000) * pricing.inputPerMillion;\n const cachedInputCost = pricing.cachedInputPerMillion\n ? (cachedTokens / 1_000_000) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / 1_000_000) * pricing.outputPerMillion;\n\n return Number((inputCost + cachedInputCost + outputCost).toFixed(12));\n}\n","import { z } from 'zod';\n\nexport const cloudflareProviderOptions = z.object({\n baseUrl: z.string().url().optional(),\n seed: z.number().int().optional(),\n user: z.string().optional(),\n logprobs: z.boolean().optional(),\n top_logprobs: z.number().int().min(0).max(20).optional(),\n frequency_penalty: z.number().min(-2).max(2).optional(),\n presence_penalty: z.number().min(-2).max(2).optional(),\n}).passthrough();\n\nexport type CloudflareProviderOptions = z.infer<typeof cloudflareProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { CloudflareProvider, type CloudflareConfig } from './CloudflareProvider';\nimport { cloudflareProviderOptions } from './providerOptions';\n\n/**\n * Cloudflare Workers AI provider factory for Standard Agents.\n */\nexport const cloudflare: ProviderFactoryWithOptions<typeof cloudflareProviderOptions> =\n Object.assign(\n (config: ProviderFactoryConfig) => new CloudflareProvider(config as CloudflareConfig),\n { providerOptions: cloudflareProviderOptions }\n );\n\nexport { cloudflareProviderOptions, type CloudflareProviderOptions } from './providerOptions';\nexport { CloudflareProvider, type CloudflareConfig } from './CloudflareProvider';\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@standardagents/cloudflare",
|
|
3
|
+
"version": "0.0.1-dev.ffff",
|
|
4
|
+
"private": false,
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public",
|
|
7
|
+
"registry": "https://registry.npmjs.org/"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"description": "Cloudflare Workers AI provider for Standard Agents",
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsup",
|
|
25
|
+
"dev": "tsup --watch",
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"test": "cd ../.. && vitest --dir packages/cloudflare",
|
|
28
|
+
"test:run": "cd ../.. && vitest run --dir packages/cloudflare"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"zod": "4.3.5"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@standardagents/spec": "^0.10.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@standardagents/spec": "workspace:*",
|
|
38
|
+
"tsup": "^8.3.5",
|
|
39
|
+
"typescript": "^5.9.0"
|
|
40
|
+
},
|
|
41
|
+
"keywords": [
|
|
42
|
+
"standardagents",
|
|
43
|
+
"cloudflare",
|
|
44
|
+
"workers-ai",
|
|
45
|
+
"provider",
|
|
46
|
+
"ai",
|
|
47
|
+
"llm"
|
|
48
|
+
],
|
|
49
|
+
"author": "FormKit Inc.",
|
|
50
|
+
"license": "UNLICENSED"
|
|
51
|
+
}
|