@particle-academy /棱镜
的TypeScript端口 棱镜, PHP/Laravel统一API层的LLM提供商。
真正的TypeScript:承诺、有区别的联合、严格的null检查。是什么 是 不 是音译-习语是这种语言的。的语料库 记录提供者行为的一致和不同之处。
在做这个包吗? 读
AGENTS.md第一,边界 这个包裹必须牢固,门必须是绿色的,陷阱必须是绿色的 已经抓到人了。@link AGENTS.md
范围
存储的助手消息保留提供程序重播状态 additionalContent:
OpenAI响应使用 output_items;人为用途已定 content_blocks,
与 thinking_blocks 作为退路。在发送历史记录时保留该元数据
回来。签名,编辑的思想和加密的推理仍然是不透明的
不变;避免记录这些值。遗留思想/签名对仍然
当没有完整的重放元数据时工作。
在0.5.0之前,Anthropic EOF message_stop 发出不可恢复的
incomplete_stream 和终端错误事件。提供程序错误关闭未完成
文本,仍然以Error结束;以后的停止/使用事件不能擦除错误。
终端使用量保持为空,除非到达最终使用量增量。消费者应该
处理这些新的可观察终端事件。本地事件词汇和
有效载荷差异分别在
流比较合同.
引用的每个功能以及18家供应商中的3家。 这就是剩余漂移的形状:一个轴,而不是两个轴。
- 所有的能力。
text,structured,stream,embeddings,images,moderation,audio(textToSpeech和speechToText),files,batch,fim. 用户消息携带图像、文档和每个提供者 用自己的方式拼写它们。 - 供应商- - - - - -
anthropic,mistral,openai. OpenAI供应商发言 这个 反应API;Mistral带来了聊天完成形状,这是一个 不同的连线格式,而不是它的变体。
未包括在内的: 工具执行循环 -一个回应
完成的工具呼叫被拒绝 tool_loop_not_supported 而不是
执行了一半——引用有15个提供者,这个端口也有
不是。要一个失败了 unsupported_provider_action 代码,而
而不是返回一些可信的东西。
不是每个功能都能达到每个提供者,因为不是每个提供者都有。
images, moderation, textToSpeech, files 和 batch 是OpenAI-only
在这里, fim 米斯特拉尔是唯一的,因为米斯特拉尔是唯一的供应商
在引用中也实现了它。查看信封的端口间隙
记录下哪些是某人可以做的工作哪些是事实
提供者。
每个值对象都序列化 和重建 - - - - - - toObject() 静态的
fromObject(). PHP包只有前半部分,留给每个消费者
发明第二种;其中一项发明有缺陷,会损坏
存储助手信息。两半都在这里,重建方向是
用固定装置固定。
失败带来稳定 code (PrismError.code). 散文不属于
合同和将改变;代码不会。
结构化反应保留 structured, steps, raw、工具架
序列化时的数组 toObject(). 每一个出口 StructuredStep 也
保留其已完成的 messages 和每一步解析的值。保存,
继续对话时的对话状态。Anthropic使用原生模式
默认输出: text 是空的,而原始JSON仍然在
助理的信息。显式结构化工具模式目前被拒绝
unsupported_provider_action 在HTTP;它不运行工具。
安装
npm install @particle-academy/prism
Node 22或更新版本。
使用
import { Prism } from '@particle-academy/prism';
const response = await Prism.text()
.using('openai', 'gpt-4o')
.withSystemPrompt('You are terse.')
.withPrompt('Who are you?')
.asText();
console.log(response.text);
console.log(response.usage.promptTokens, response.usage.completionTokens);
首先是显式配置,其次是环境 OPENAI_API_KEY,
OPENAI_URL, OPENAI_ORGANIZATION, OPENAI_PROJECT:
Prism.text().using('openai', 'gpt-4o', { apiKey: 'sk-…', transport });
transport 是提供者和网络之间的接缝。第一次和第二次
Test从未接触过套接字:
import type { HttpTransport } from '@particle-academy/prism';
const transport: HttpTransport = async (request) => ({
status: 200,
headers: {},
body: recordedPayload,
rawBody: JSON.stringify(recordedPayload),
});
构建一个请求而不发送它,或者在没有HTTP的情况下解析存储的有效负载:
import { buildRequestBody, canonicalJson, parseTextResponse } from '@particle-academy/prism';
const request = Prism.text().using('openai', 'gpt-4o').withPrompt('hi').toRequest();
canonicalJson(buildRequestBody(request)); // exactly the bytes that would be POSTed
parseTextResponse(request, recordedPayload); // the same parse a live call performs
奇偶校验
该端口的行为不是由它自己的测试定义的。它被钉住了 prism-parity ——一个 通过执行PHP生成的与语言无关的一致性语料库 引用,它一次声明规则,因此三个实现不能同时执行 漂移到他们自己的阅读。
语料库及其加载程序安装为 @particle-academy/prism-conformance。这个
跑步者住在 conformance/runner.mjs 并实现了
Prism-parity的子进程契约,所以 scripts/cross-check.mjs 可以运行这个
港口与其他港口并排并要求 相同的判决 -更强
声称超过三间套房都是绿色的。
git clone https://github.com/Particle-Academy/prism-parity .parity
npm install ./.parity/loaders/ts
npm run conformance # every suite
node conformance/runner.mjs --suite openai-text-request
node conformance/runner.mjs --probe omit-null-keys
有两行故意偏离引用,语料库说which和
原因: trq-0021 和 trq-0022的提示符 "" 或者
"0" 这个端口发送它。阅读语料库的其余部分-重申其规则
这里只会给他们一个漂流的地方。
探针
--probe 运行端口时故意注入一个缺陷,从语料库中
probes/probes.json. 每个探测声明一组它必须失败的case id,
和 tests/probes.test.ts 断言观察集
= 并不是说它是非空的。一个表列出了每个可行的实现
通行证不算什么。
变种人住在 conformance/mutations.mjs,
外 src/你可以在生产中打开的缺陷就是缺陷。
开发
npm run build # tsc → dist/
npm run typecheck
npm run lint
npm test
npm run conformance
许可证
麻省理工学院。看到 许可证.