/** * AnthropicProviderBase —— Anthropic Messages 协议的 Provider 基类。 * * 设计要点: * - 各 Anthropic 协议 provider(如 Linkque)都基于 Anthropic Messages 协议,复用 * pi-ai 内置的 `anthropic-messages` API 实现(经 `anthropicMessagesApi()` 取得 ProviderStreams)。 * - 基类提供通用的 `createAnthropicProvider()` 工厂函数,通过参数区分不同 provider。 * - 认证(API key)不在此处固化:注册时只给一个最小 `ApiKeyAuth`,真实凭据由 * `Agent.getApiKey` 在每次 LLM 调用前以 `options.apiKey` 注入,经 * `models.streamSimple → applyAuth → resolveProviderAuth` 合成 credential 透传给 * `apiKey.resolve`,绝不落盘。 * * 使用方式: * ```ts * // 创建 Linkque provider * const linkqueProvider = createAnthropicProvider({ * providerId: 'linkque', * providerName: 'Linkque', * baseUrl: 'https://linkquegw.dl.alipaydev.com/api/anthropic', * models: linkqueModels, * authName: 'Linkque API key', * }); * ``` */ import { type Model, type Provider } from '@earendil-works/pi-ai/compat'; /** * Anthropic 协议模型描述符。 * * 描述一个模型的基本元数据能力:上下文窗口、最大输出、是否支持推理、输入模态等。 * 最终模型成本字段 pi-ai 强制要求,但各 provider 计费另算,给零值占位。 */ export interface IAnthropicModelDescriptor { id: string; name: string; reasoning: boolean; /** 支持的输入模态。 */ input: ('text' | 'image')[]; /** 上下文窗口(单位:token)。 */ contextWindow: number; /** 单次响应最大输出 token。 */ maxTokens: number; } /** * 创建 Anthropic Provider 的选项。 */ export interface ICreateAnthropicProviderOptions { /** Provider id(小写字符串,如 'linkque')。 */ providerId: string; /** Provider 显示名称。 */ providerName: string; /** Anthropic Messages 协议入口 URL。 */ baseUrl: string; /** 该 provider 支持的模型清单。 */ models: IAnthropicModelDescriptor[]; /** API Key 认证名称(用于错误提示)。 */ authName: string; /** * 固定的非敏感占位 Key。仅用于网关本身无鉴权、但客户端库要求 * 必须存在 API Key 的 provider;设置后忽略调用方传入的凭据。 */ fixedApiKey?: string; } /** * 构造基于 Anthropic Messages 协议的 Provider(复用 pi-ai 内置实现)。 * * 返回独立 Provider 对象,由调用方 `models.setProvider(createAnthropicProvider(...))` * 接入。每次调用返回新实例(无共享状态)。 * * @param options 见 {@link ICreateAnthropicProviderOptions} * @returns Anthropic Messages 协议的 Provider 对象。 */ export declare function createAnthropicProvider(options: ICreateAnthropicProviderOptions): Provider<'anthropic-messages'>; /** * 把单个模型描述符映射成 pi-ai 的 `Model<'anthropic-messages'>`。 * * 抽出共享:既被 {@link createAnthropicProvider} 批量映射,也被 provider 外 * 构造「透传模型」(未在本地 catalog 声明、交由网关校验的模型 id)复用, * 保证两条路径产出的 Model 形状一致。 */ export declare function buildAnthropicModel(providerId: string, baseUrl: string, descriptor: IAnthropicModelDescriptor): Model<'anthropic-messages'>;