/** * Format Convert — 数据流格式转换核心工具集 * * 统一管理三种数据流格式之间的互相转换: * 1 → OpenAI Chat Completions (openai-chat) * 2 → Anthropic Messages (anthropic) * 3 → OpenAI Responses (openai-responses) * * 所有转换以 OpenAI Chat 格式为中心。 */ import Anthropic from '@anthropic-ai/sdk'; import type { Message, MessageParam, Tool } from '@anthropic-ai/sdk/resources/messages/messages'; import OpenAI from 'openai'; export interface ModelRow { id: number; name: string; model_name: string; url: string; max_content_length: number; max_token: number; api_key: string; sort_index: number; api_format: number; model_label_id: number | null; capabilities: string | null; isLock: number; isDisable: number; user_id?: number; created_at: string; } export interface AIProvider { type: 'anthropic' | 'openai-chat' | 'openai-responses'; client: Anthropic | OpenAI; modelName: string; } export interface GenericMessage { role: 'system' | 'user' | 'assistant' | 'tool'; content: string | Array> | null; tool_call_id?: string; tool_calls?: Array<{ id: string; type: 'function'; function: { name: string; arguments: string; }; }>; } export interface OpenAIMessage { role: string; content: string | Array> | null; tool_calls?: Array<{ id: string; type: string; function: { name: string; arguments: string; }; }>; tool_call_id?: string; name?: string; } export interface OpenAITool { type: string; function: { name: string; description?: string; parameters: Record; }; } export interface UserSettings { max_content_length: number; max_token: number; } export declare const MAX_RESPONSE_TOKENS = 64000; /** 上游请求超时时间(毫秒) */ export declare const REQUEST_TIMEOUT_MS = 30000; export declare const API_FORMAT: { readonly OPENAI_CHAT: 1; readonly ANTHROPIC: 2; readonly OPENAI_RESPONSES: 3; }; export declare const LOCK_DURATION_MS: number; /** 生成随机字符串 */ export declare function generateRandomString(length?: number): string; /** 估算文本的 token 数(约 3 字符/token) */ export declare function estimateTextTokens(text: string): number; /** 估算消息数组的 token 数 */ export declare function estimateMessagesTokens(messages: GenericMessage[]): number; export declare function createModelProvider(model: ModelRow): AIProvider; export declare function isModelLocked(isLock: number): { locked: boolean; expired: boolean; }; /** * OpenAI Chat 消息 → Anthropic Messages 格式 * 将 system 消息提取为顶层 system 字段 */ export declare function convertToAnthropicMessages(messages: OpenAIMessage[], system?: string): { system?: string; messages: MessageParam[]; }; /** * OpenAI Chat 消息 → 通用消息格式 */ export declare function convertToOpenAIChatMessages(messages: OpenAIMessage[]): GenericMessage[]; export declare function convertToAnthropicTools(tools: OpenAITool[]): Tool[]; export declare function convertToOpenAITools(tools: OpenAITool[]): Record[]; /** * tool_choice 格式转换(OpenAI ↔ Anthropic) */ export declare function mapToolChoice(toolChoice: unknown, direction: 'to-anthropic' | 'to-openai'): unknown; export declare function mapStopSequences(stop: unknown, direction: 'to-anthropic' | 'to-openai'): unknown; export declare function convertAnthropicToChatCompletion(response: Message, modelName: string): Record; /** * Responses API 请求 → Chat Completion 请求 * 已迁移至 ConvertUtils.responsesRequestToChatRequest */ export declare function convertResponsesRequestToChatRequest(body: Record): Record; /** * Chat Completion 响应 → Responses API 响应 */ export declare function convertChatCompletionToResponse(chatCompletion: Record, requestBody: Record): Record; /** * OpenAI Chat 响应 → Anthropic Messages 响应格式 * * 将 OpenAI Chat Completion 响应转换为 Anthropic Message 对象, * 供 /v1/messages 端点使用。 */ export declare function convertOpenAIChatToAnthropicResponse(chatCompletion: Record, requestBody: Record): Record; /** * 将错误响应包装为 Anthropic 格式的错误对象 */ export declare function toAnthropicError(message: string, type?: string): Record; /** * 将 Anthropic Messages API 的请求体转换为通用的 ChatCallParams * * 处理 Anthropic 特有的字段结构: * - system 字段(字符串或文本块数组) * - messages 中的 content 块(text/image/tool_use/tool_result) * - tool_choice 对象格式 * - stop_sequences 数组 * - 请求中不存在的 max_tokens 走默认值 */ export declare function convertAnthropicRequestToCommon(body: Record): ChatCallParams; export interface ChatCallParams { messages: GenericMessage[]; maxOutputTokens: number; temperature?: number; topP?: number; tools?: Array<{ function: { name: string; description?: string; parameters: Record; }; }>; toolChoice?: string; system?: string; } export declare function callOpenAIChat(provider: AIProvider, params: ChatCallParams): Promise; export declare function callAnthropic(provider: AIProvider, params: ChatCallParams): Promise>; export declare function callOpenAIResponses(provider: AIProvider, params: ChatCallParams, _originalBody: Record): Promise>; /** * 调用 Anthropic SDK 并返回原始 Anthropic Message 格式的响应(内部流式) * 用于 /v1/messages 端点,避免转换回 OpenAI Chat 格式再转回的损耗。 * Anthropic SDK 要求长时间请求必须走 streaming,所以内部始终流式并收集结果。 */ export declare function callAnthropicMessages(provider: AIProvider, params: ChatCallParams): Promise>; /** Anthropic 流式创建,用于 /v1/messages 端点 */ export declare function streamAnthropicMessages(provider: AIProvider, params: ChatCallParams): Promise; export declare function getUserEffectiveSettings(): UserSettings; export declare function getEffectiveContentLength(modelContentLength: number): number; export declare function getEffectiveMaxToken(): number; /** 构建 OpenAI 模型响应格式(含 Codex 所需元数据) */ export declare function buildOpenAIModel(model: ModelRow): { id: string; object: string; created: number; owned_by: string; name: string; content_length: number; capabilities: any; supports_responses_api: boolean; max_output_tokens: number; }; export declare function parseModelCapabilities(raw?: string | null): string[]; //# sourceMappingURL=format-convert.d.ts.map