@ aparte/ provider-openai-compat (英语)
一个 每个 OpenAI 兼容的适配器 /chat/completions 端点 — OpenAI, Mistral,
OpenRouter, Z.ai, Groq, 在一起, LM Studio, Ollama (英语:/v1朋友都这么说
电线格式,所以他们共享一个单, 零依赖性 格式适配器。 供应商只有差异
通过数据(基准 URL、 认证头、 品牌),通过配置或从中选择 presets。 。 。 .
npm install @aparte/provider-openai-compat @aparte/core
@aparte/core 是唯一一个 同伴依赖;这个适配器本身没有.
import { createOpenAICompatProvider, presets } from '@aparte/provider-openai-compat';
import { aparteGlobalConfig } from '@aparte/core';
aparteGlobalConfig.registerAIProvider(createOpenAICompatProvider(presets.OPENROUTER));
// …or any compat endpoint, no preset needed:
aparteGlobalConfig.registerAIProvider(createOpenAICompatProvider({ id: 'groq', baseURL: 'https://api.groq.com/openai/v1' }));
@aparte/core 是一个 同伴依赖. 适用于OpenAI-compat家族以外的供应商
(Anthropic,双子座, @aparte/provider-ai-sdk 换句话说.
也在服务器上工作. 这里什么也碰不到DOM,核心解决了它的DOM无
在节点的导出条件下输入 —— 这样您就可以从后端重用这个适配器, a
电子主进程或SSR通过,而不是重写一个. 对 buildRequest 编号 :
parseStream 与你自己 fetch 当您已经拥有此请求时( 您的) AbortSignal, (中文(简体) ),
或把它交给 createAparteChatHandler 从核心.
部分 独立 单相机 仅限无害环境管理. 见 供应商 用于全部使用的文档中的指南.
上下文窗口
fetchModels 填充每个模型的 contextWindow,这是标志度量仪和
紧固度量相. 它读取了第一个正整数 context_length
(开放路透,共同), max_model_len (vLLM), (英语), context_window (希腊语)和
max_context_length (伊斯兰教) GET /models 输入。 本地服务器也需要
说哪一个,因为他们大半不开窗 /models数字 :
createOpenAICompatProvider({ id: 'my-box', baseURL: 'http://localhost:8080/v1', isLocal: true, server: 'llamacpp' });
与 server 设置中,一个额外的请求会到端点的出处( /v1 路径
(被剥去) 有效 窗口胜过训练后的最大值,因为那是
服务器截图 :
| 预设 | server | 读取 | 页:1 |
|---|---|---|---|
LMSTUDIO | lmstudio | /api/v1/models: 装入的型号 config.context_length | 一个已卸载的型号没有 |
OLLAMA | ollama | /api/ps: 加载跑者 context_length | 未加载的模型获得无 |
LLAMACPP | llamacpp | /props数字 : default_generation_settings.n_ctx | 每个插槽,服务模式的一个值 |
VLLM | vllm | max_model_len 打开 /v1/models | 无额外请求 |
一个被卸载的模型没有窗口,而只得到它训练的极限:这个数字不是什么 服务器将运行。 失败的探测器( CORS, 旧服务器, 关闭端口) 离开 没有窗口的模型并记录一个警告; 它永远不会失败模型列表.
您声明的模型 models 带有 contextWindow 胜过读取的任何东西
服务器.
LLAMACPP (单位:千美元)http://localhost:8080/v1和 VLLM (单位:千美元)http://localhost:8000/v1)是预设
像其他人一样:本地的,密钥可选.
来源和引文
一份引用其来源的回信会带他们来: 提供者以一个结束转弯
sources 事件之前 done在答复中列出资料来源,并列出
每一个引用的芯片 。 没有要配置的东西——一个不会发出引用的结束点
溪流的原样.
import { createOpenAICompatProvider, presets } from '@aparte/provider-openai-compat';
import { aparteGlobalConfig } from '@aparte/core';
// Perplexity's Sonar models search the web and cite what they read.
aparteGlobalConfig.registerAIProvider(createOpenAICompatProvider(presets.PERPLEXITY));
// OpenRouter's `:online` models and the OpenAI search models cite through annotations.
aparteGlobalConfig.registerAIProvider(createOpenAICompatProvider(presets.OPENROUTER));
两个形状读作:
url_citation说明 (开放AI,开放路透)delta.annotations,或打开message.annotations用于流出整个消息形状的服务器。 他们携带 他们支持的段落被抵消,成为引用的start编号 :end; 一个 将文字的末尾带入其中.- 困惑的
citations财务报告和审定财务报表search_results在块的根部,没有 抵消: 文本带[1], (中文(简体) ),[2],因此文本中发现的每个标记成为 引用(marker: true芯片在那个来源上占据了标记的位置 一个标记 名称没有来源作为文本.
引用的同一页有1个来源(由URL复制),1个来源有两个来源
光泡显示为“+1”。 一个 URL 作为终点传递
寄出: 核心的渲染器只链接到它的消毒器允许的图案, 所以 javascript: 網址
显示为文本,而不是链接.
这个 PERPLEXITY 预设声明其模型( q)sonar, (中文(简体) ), sonar-pro, (中文(简体) ), sonar-reasoning-pro, (中文(简体) ),
sonar-deep-research因为困惑没有 GET /models 询问;通过自己的 models
以更改列表.
非流化答案( :stream: false)的读取方式相同 parseSources: 当
引用任何东西,它解决了流 流的答案是,它的文本,它的源,它的
结束——通过直接运输,并通过你的后端.
错误和结束原因
响应的服务器 200 然后流出 data: {"error": {...}} (LM Studio on a) (英语)
上下文溢出、 OpenAI 和 vLLM 中游) 以一个 error 包含的事件
它的信息, 不是一个空的完整回复 。 最后一个 finish_reason 流量
编辑 done 事件为 finishReason (单位:千美元)stop, (中文(简体) ), length, (中文(简体) ), tool-calls, (中文(简体) ), content-filter, (中文(简体) ),
other) (中文(简体) ).