@ alia.onl/ 服务器
阿丽雅的客户端 后端 给阿丽亚打电话.
@alia.onl/sdk 是客户端 SDK: 反应和反应原生组件, 钩子, a
浏览器侧流读取器. 这个包是另一半,没有反应,没有DOM
外加 fetch 财务报告和审定财务报表 ReadableStream,无附属关系,节点22+. 一号
转向 /v1/chat/completions 并赏赐你一种能写实的、
写作.
为什么它存在
阿丽雅可以在溪上写这些东西:
| 在电线上 | 这是什么 |
|---|---|
data: {…choices[0].delta.content} | 助理文本三角洲 |
data: {…choices[0].delta.reasoning} | 推理三角洲 |
event: alia.tool_result + 键 data: {…} | 命名的产品事件 |
data: {…, "alia_meta": {"synthetic": true}} | 即时信息 a 年龄 服务器在提供者死后写出; 当前服务器以下面的错误有效载荷结束一个失败的转折 |
data: {"error":{"code":"agent_unavailable"}} | 阿丽雅拒绝,中游 |
data: [DONE] | 结束符 |
每个从服务器打给阿丽亚的消费者 都为此写了自己的读者
每个都有一个不同的子集。 昂贵的是错误的有效载荷:a
没有分行的读者 要么扔出一个赤裸的502 不命名, 或 -
更糟糕的是, 两者
发生在生产。 此软件包使该形状成为已键入 error 事件
携带服务器本身 code,所以消费者不能不看到它.
安装
bun add @alia.onl/server # or npm / pnpm / yarn
使用
import { AliaServerClient } from '@alia.onl/server';
const alia = new AliaServerClient({
baseUrl: 'https://api.alia.onl',
// Your product's Oxy service token — the bearer Oxy bills (ADR 0007).
token: () => getMyServiceToken(),
});
const stream = await alia.stream(
{ agentId: MY_AGENT_ID, messages: [{ role: 'user', content: 'Hola' }] },
{ signal: request.signal },
);
for await (const event of stream) {
switch (event.type) {
case 'text': process.stdout.write(event.text); break;
case 'reasoning': break;
case 'event': onProductEvent(event.event, event.data); break;
case 'finish': break;
case 'error': throw new MyChatError(event.code); // the SERVER's code
case 'done': break;
}
}
这个 switch 以上是详尽无遗的: AliaStreamEvent 一个封闭的工会,所以
default: never 分支使新事件类型成为编译错误而不是一个
默然倒下相框.
它拥有的
- 内容类型检查 . 两百块不是
text/event-stream是一个AliaStreamError('not_event_stream')从来没有一个缓冲后退的剖面. - (原始内容存档于2018-03-26). SSE Framing. 多线
data:,注释框, CRLF,event: message作为 SSE 的默认名称,并且字节边界在任何地方下降——包括 (原始内容存档于2017-09-28). Middle UTF-8. 文字三角洲是逐字生成的,从未合并,因为 消费者重新组装跨块标记取决于准确的字节. [DONE]。 。 。 . 迭相止于上. 一个没有它而结束的身体是AliaStreamError('truncated')——短转不得读作短转.- 错误块,作为
error活动code, (中文(简体) ),message, (中文(简体) ),type, (中文(简体) ),param。 。 。 . - 中止 . 通过一个
AbortSignal请求和身体都读了 离开for await提前取消遗体. - 非-2xx) (中文(简体) ),作为
AliaRequestError与status当尸体被携带的时候 一个,code. 身体的道具被故意不保留.
错误
import { AliaRequestError, AliaStreamError } from '@alia.onl/server';
AliaStreamError 携带 failure (单位:千美元) not_event_stream, (中文(简体) ), no_body, (中文(简体) ),
malformed_json, (中文(简体) ), unexpected_chunk, (中文(简体) ), choice_without_delta, (中文(简体) ),
content_not_string, (中文(简体) ), truncated, (中文(简体) ), oversized和 shape - 犯规者
块的钥匙,它的 choices 长度或类型,以及任何 error.code。 。 。 . shape 持有
无内容:不是助手的文字,也不是人物的快取. 全部记录下来.
AliaRequestError 携带 status 财务报告和审定财务报表 code。 。 。 .
终止投出 Error 谁 name 实值 AbortError,作为 fetch没错.
你自找麻烦吧
import { readAliaEventStream } from '@alia.onl/server';
for await (const event of readAliaEventStream(response.body!, { signal })) { … }
证书
阿丽雅收到呼叫产品 氧化服务符 作为承载者。 A 类
个人的持单人从未被转交。 换个签到的人不会
完全通过产品后端: 个人用自己的设备打开代理
氧化会话通过 @alia.onl/sdk (Alia ADR 0020) (英语). headers 接受一个
函数,用于一个在每次请求中其值会发生变化的标题.
测试
测试装置不是手写块。 由API公司生产
拥有SSE作家—— packages/api/src/lib/streaming-helpers.ts, (中文(简体) ),
.../chat/sse-writer.ts, (中文(简体) ), .../sse-emitter.ts ——直接进口,故有变动
alia在电线上做的试验 都失败了.
bun run typecheck
bun run test
bun run build
许可证
阿帕奇2.0 (英语). 见 LICENSE 财务报告和审定财务报表 NOTICE。 。 。 .
明确停止 (1.3)
对于经过验证的人类会话或精确的仅应用证书,请先选择一个UUID v4
stream() 供应 turnId。 。 。 . cancelTurn({ turnId, conversationId }) 使用该
相同的认证和表面头; conversationId 必须是值
在录取时知道,包括缺席 新的谈话。 它的信号是
独立于流的中止符号 。 中止后一选项只解开
并允许背景补全.
createAliaTurnControl(client, { controller, lifetimeSignal, conversationId }) 创建 UUID
在任何同步准备之前 发送其 id 作为请求 turnId· ;
调用 stop() 只是为了故意停止。 它重复了同时停止通话,
等待最多十秒的确认,然后中止控制器.
一个被拒绝的停止拒绝 并且仍然可以重试。 直接中止流控制器以进行视图撕毁 。 分开
lifetimeSignal 栅栏账户变更或经认证的所有人处置;
它不能是流信号,因为一个取消的SSE框架可以关闭
在确认控制请求之前的流程。 帮助者从不刷新或
选择账户.
等着 finish() 在处理呼叫器的连接运输之前 每个 HTTP 工具
继续获得一个新的手柄,停止本地工具防止再发子弹
而不取消已经完成的工作.
在采用这个制片人之前部署API接收器. 授权服务/渠道
没有可核查的原始角色的呼叫者必须省略 turnId; 现有的
聊天仍然支持,但他们不能使用此取消道 。 细节和
结算/重试限额: 明确停止。 。 。 .