跳到正文
GitHub·· 2 小时前AI 评分36

xsAI:按协议适配的轻量 AI SDK,支持 OpenAI、Anthropic 等协议

moeru-ai/xsai

AI 导读

moeru-ai 开源 xsAI,一个按协议而非按厂商适配的轻量 AI SDK,提供 responses()、chat()、messages() 三个工厂函数,分别对接 OpenAI Responses、Chat Completions 和 Anthropic Messages 协议。

正文

Quick start

pnpm add xsai
import { generateText, responses } from 'xsai'

const model = responses({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: 'https://api.openai.com/v1/',
  model: 'gpt-6-luna',
})

const { text } = await generateText(model, { input: 'Say hello.' })
console.log(text)

Streaming uses the same model. Each event is a typed TextEvent in a standard ReadableStream:

import { streamText } from 'xsai'

const stream = streamText(model, { input: 'Describe a quiet forest.' })

for await (const event of stream) {
  if (event.type === 'text.delta')
    process.stdout.write(event.delta)
  if (event.type === 'step.end' && event.status === 'failed')
    throw event.error
}

Why xsAI

  • Small parts. Each package does one job. Every package is an ES module with no side effects, so your bundler removes the code that you do not use.
  • A model belongs to a protocol, not to a provider. One adapter covers every service that speaks the same protocol. Change the service, keep your code.
  • Web standards. fetch, ReadableStream, AbortSignal, and FormData. The source imports no Node.js module. Replace fetch to add a proxy, a test double, or your own retries.
  • Typed from end to end. Options, results, events, and tool inputs have TypeScript types. Schemas follow Standard Schema, so you can keep the validation library that you already use.

One adapter per protocol

xsAI does not ship a package for each provider. It ships an adapter for each protocol, and many services and gateways speak at least one of them.

Protocol Package Factory
OpenAI Responses @xsai/text-responses responses()
Chat Completions @xsai/text-chat chat()
Anthropic Messages @xsai/text-messages messages()

Every factory returns a LanguageModel, so generateText, streamText, and tool calls work the same with all three. If your service speaks another protocol, you can write a custom model.

Packages

Install xsai for everything, or only the packages that you use.

Package Provides
@xsai/text generateText, streamText, collect, and tool
@xsai/audio Speech generation and transcription
@xsai/decide Typed answers to yes-or-no, choice, and score questions
@xsai/embed Text embeddings
@xsai/image Image generation
@xsai/model Model lists from a service
@xsai/shared HTTP options, sendRequest, and error types
xsschema Schema conversion and validation, as a separate package
xsai One package that re-exports everything above except xsschema

Runs anywhere

xsAI runs on any runtime with fetch and web streams: Node.js, Deno, Bun, Cloudflare Workers, and browsers.

Community projects

xsAI is used in community and in-house projects, including:

Contributing

See CONTRIBUTING.md. To edit or build the docs, see documentation maintenance.

License

MIT

Sponsors

sponsors

来源:GitHub · github.com