/** * LinkqueProvider —— 把灵鹊 Linkque 模型服务(基于 Anthropic Messages 协议)注册成 * pi-ai Models 可消费的自定义 provider。 * * 设计要点: * - Linkque 服务对外暴露 Anthropic Messages 协议的 HTTP 入口, * 复用 pi-ai 内置的 `anthropic-messages` API 实现,该逻辑已抽象到 anthropicProviderBase。 * - provider id 用小写 `linkque`(pi-ai 的 providerId 是字符串契约,enum `EModelProvider.LINKQUE` * 是协议层标识,二者解耦:协议枚举 → provider id 的映射收口在 agentService)。 * - Linkque 网关本身不需要 API Key;仅因 pi-ai 的 Anthropic transport 要求 * 非空 Key,provider 内部固定注入非敏感占位值,不读取或透传调用方凭据。 * - 本地模型清单仅作「已知模型精确元数据 + 缺省选模」用,**不是白名单**; * 未在清单内的 model id 经 {@link createLinkqueModel} 透传,由 Linkque 网关校验。 * * 内部实现通过 anthropicProviderBase.createAnthropicProvider 封装,复用基类逻辑。 */ import type { Model, Provider } from '@earendil-works/pi-ai/compat'; /** Linkque 在 pi-ai Models 中的 provider id(小写)。 */ export declare const LINKQUE_PROVIDER_ID = "linkque"; /** * Linkque 模型网关读取 agentId 的请求头名。 * * 网关 `thetaproxy/ModelProxyController.buildCommand`:`headers['x-agent-id'] || traceId || 'unknown'`, * agentId 作计费归因 key(ModelCallCommand → getMeteringByAgentId)。缺失则回退 traceId, * 无计费上下文。客户端必须把真实 agentId 经此头透传,模型用量上报强依赖它。 */ export declare const LINKQUE_AGENT_ID_HEADER = "x-agent-id"; /** * Linkque 模型网关读取 runId 的请求头名(用量上报归因维度)。 * * 网关 `thetaproxy/ModelProxyController.buildCommand`:`extractRunId(body, headers)` 优先取 * `body.metadata.latestRunId` → `body.runId`,最后回退本头 `x-run-id`(agent-runtime 走此路径)。 * 落库 `linkque_model_usage.run_id` 列供链路归因。客户端须把会话 runId 经此头透传,缺失则落空。 */ export declare const LINKQUE_RUN_ID_HEADER = "x-run-id"; /** * Linkque 模型网关读取 chatId 的请求头名(会话归因)。 * * 网关:`headers['x-chat-id'] || traceId`。runtime 用会话 threadId 填充 * (runConversation 已把 request.threadId 写入 runtimeContext.threadId)。 */ export declare const LINKQUE_CHAT_ID_HEADER = "x-chat-id"; /** * Linkque 模型网关读取 userId 的请求头名(调用用户,SPEC 标注待定/可选)。 * * 网关:`headers['x-user-id'] || undefined`。runtime 从可信 runtimeContext.userId 取 * (由 CLI/gateway 调用方按环境注入,绝不从模型/客户端字段推断)。缺失则不注入,网关计 unknown。 */ export declare const LINKQUE_USER_ID_HEADER = "x-user-id"; /** * Linkque 模型服务入口(Anthropic Messages 协议,不含 /v1/messages 后缀)。 * Anthropic SDK 会自动追加 /v1/messages。 */ declare const LINKQUE_BASE_URL: { readonly pre: "https://linkquegw-pre.alipay.com/api/anthropic"; readonly prod: "https://linkquegw.alipay.com/api/anthropic"; }; type LinkqueEnvironment = keyof typeof LINKQUE_BASE_URL; /** * pi-ai 的 Anthropic transport 要求请求必须带非空 API Key。 * Linkque 网关不校验该字段,因此统一使用固定的非敏感占位值, * 不从环境变量或调用方接收真实凭据。 */ export declare const LINKQUE_KEYLESS_PLACEHOLDER = "linkque-keyless-placeholder"; /** * 为不在本地 catalog 的 model id 构造透传 Model。 * * Linkque 网关自身校验模型 id,客户端不再用 {@link LINKQUE_MODELS} 白名单拦截。 * 此函数用 {@link LINKQUE_PASSTHROUGH_DEFAULTS} 产出一个 pi-ai 可 stream 的 * Model 对象(元数据为保守默认),让任意 model id 都能透传到网关。 * * env 必须与调用方 `createLinkqueProvider(env)` 使用的环境一致 —— pi-ai 的 * anthropic-messages transport 在请求时取 `model.baseUrl`(非 provider.baseUrl), * 二者 baseUrl 不同会打到不同网关入口。缺省 `pre`,与 agentService 默认一致。 * * @param modelId 调用方传入的模型 id,原样作为请求模型名透传给网关。 * @param env Linkque 网关环境,缺省 `pre`。 * @returns 透传用的 Model 对象。 */ export declare function createLinkqueModel(modelId: string, env?: LinkqueEnvironment): Model<'anthropic-messages'>; /** * 构造 Linkque provider(基于 anthropicProviderBase 封装的通用逻辑)。 * * 返回独立 Provider 对象,由调用方 `models.setProvider(createLinkqueProvider(env))` * 接入。每次调用返回新实例(无共享状态);未指定环境时默认走预发。 * * @param env Linkque 网关环境,缺省 `pre`。 * @returns Linkque 的 Provider 对象。 */ export declare function createLinkqueProvider(env?: LinkqueEnvironment): Provider<'anthropic-messages'>; export {};