MCPcopy Index your code
hub / github.com/Ai00-X/ai00_server

github.com/Ai00-X/ai00_server @v0.7.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.7.1 ↗ · + Follow
1,036 symbols 2,046 edges 87 files 162 documented · 16% updated 29d agov0.7.1 · 2026-06-09★ 61816 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

💯AI00 Server

license Rust Version PRs welcome

All Contributors

en zh


AI00 Server是一个基于RWKV模型的推理API服务器。

AI00 Server基于 WEB-RWKV推理引擎进行开发。

支持Vulkan/Dx12/OpenGL作为推理后端,无需臃肿的pytorchCUDA等运行环境,小巧身材,开箱即用!

兼容OpenAI的ChatGPT API接口。

100% 开源可商用,采用MIT协议。

如果你是想要在自己的应用程序中内嵌一个LLM,且对用户的机器要求不那么苛刻(6GB以上GRAM的显卡), AI00 Server无疑是一个很好的选择。

立即加入AI00 RWKV Server社区,体验AI的魅力!

交流QQ群:30920262

⭕模型下载和转换

你必须下载模型并将其放置在assets/models中。

你可以在这里下载已经转换好的模型: V5V6v7

安装、编译和使用

📦直接下载安装

  1. 直接从 Release 下载最新版本

  2. 下载模型后把模型放在assets/models/路径,例如assets/models/RWKV-x060-World-3B-v2-20240228-ctx4096.st

  3. 你可以修改 assets/configs/Config.toml 里面的模型配置,包括模型路径、量化层数等

  4. 在命令行运行

    bash ./ai00_rwkv_server

  5. 打开浏览器,访问WebUI http://localhost:65530(如果开启了tls,访问 https://localhost:65530)

📜从源码编译

  1. 安装Rust

  2. 克隆本仓库

    bash git clone https://github.com/cgisky1980/ai00_rwkv_server.git cd ai00_rwkv_server

  3. 下载模型后把模型放在 assets/models/路径下,例如assets/models/RWKV-x060-World-3B-v2-20240228-ctx4096.st

  4. 编译

    bash cargo build --release

  5. 编译完成后运行

    bash cargo run --release

  6. 打开浏览器,访问WebUI http://localhost:65530(如果开启了tls,访问 https://localhost:65530)

📒模型转换

本项目目前仅支持.st后缀的 Safetensors 模型,通过torch保存的.pth后缀模型需要在使用前进行转换。

  1. 下载pth模型

  2. 克隆或下载本仓库下convert_safetensors.py程序,并安装相应的依赖库(torchsafetensors

  3. 运行上述程序,并指定输入输出路径

    bash $ python assets/scripts/convert_safetensors.py --input ./filename.pth --output ./filename.st

  4. 如果你不想安装 Python 或 Torch,可以前往web-rwkv并下载不依赖于 Python 或 Torch 的转换器web-rwkv-converter

    bash $ ./web-rwkv-converter --input /path/to/model.pth --output /path/to/model.st

  5. 根据上文步骤,将转换所得的.st模型文件放在assets/models/路径下,并修改 assets/configs/Config.toml 中的模型路径

📝支持的启动参数

  • --config: 模型配置文件路径(默认assets/configs/Config.toml
  • --ip: 服务器绑定的IP地址
  • --port: 运行端口

📙目前可用的API

API 服务开启于 65530 端口, 数据输入输出格式遵循 Openai API 规范。 有一些 API,比如chatcompletions有一些可选的额外字段,这些额外字段是为高级功能准备的。可以访问 http://localhost:65530/api-docs 查看具体的 API 参数。

  • /api/oai/v1/models
  • /api/oai/models
  • /api/oai/v1/chat/completions
  • /api/oai/chat/completions
  • /api/oai/v1/completions
  • /api/oai/completions
  • /api/oai/v1/embeddings
  • /api/oai/embeddings

下面是一个 Python 的 Ai00 API 调用示例,开箱即用:

import openai

class Ai00:
    def __init__(self,model="model",port=65530,api_key="JUSTSECRET_KEY") :
        openai.api_base = f"http://127.0.0.1:{port}/api/oai"
        openai.api_key = api_key
        self.ctx = []
        self.params = {
            "system_name": "System",
            "user_name": "User", 
            "assistant_name": "Assistant",
            "model": model,
            "max_tokens": 4096,
            "top_p": 0.6,
            "temperature": 1,
            "presence_penalty": 0.3,
            "frequency_penalty": 0.3,
            "half_life": 400,
            "stop": ['\x00','\n\n']
        }

    def set_params(self,**kwargs):
        self.params.update(kwargs)

    def clear_ctx(self):
        self.ctx = []

    def get_ctx(self):
        return self.ctx

    def continuation(self, message):
        response = openai.Completion.create(
            model=self.params['model'],
            prompt=message,
            max_tokens=self.params['max_tokens'],
            half_life=self.params['half_life'],
            top_p=self.params['top_p'],
            temperature=self.params['temperature'],
            presence_penalty=self.params['presence_penalty'],
            frequency_penalty=self.params['frequency_penalty'],
            stop=self.params['stop']
        )
        result = response.choices[0].text
        return result

    def append_ctx(self,role,content):
        self.ctx.append({
            "role": role,
            "content": content
        })

    def send_message(self, message,role="user"):
        self.ctx.append({
            "role": role,
            "content": message
        })
        result = openai.ChatCompletion.create(
            model=self.params['model'],
            messages=self.ctx,
            names={
                "system": self.params['system_name'],
                "user": self.params['user_name'],
                "assistant": self.params['assistant_name']
            },
            max_tokens=self.params['max_tokens'],
            half_life=self.params['half_life'],
            top_p=self.params['top_p'],
            temperature=self.params['temperature'],
            presence_penalty=self.params['presence_penalty'],
            frequency_penalty=self.params['frequency_penalty'],
            stop=self.params['stop']
        )
        result = result.choices[0].message['content']
        self.ctx.append({
            "role": "assistant",
            "content": result
        })
        return result

ai00 = Ai00()
ai00.set_params(
    max_tokens = 4096,
    top_p = 0.55,
    temperature = 2,
    presence_penalty = 0.3,
    frequency_penalty = 0.8,
    half_life = 400,
    stop = ['\x00','\n\n']
)
print(ai00.send_message("how are you?"))
print(ai00.send_message("me too!"))
print(ai00.get_ctx())
ai00.clear_ctx()
print(ai00.continuation("i like"))

BNF 采样

从 v0.5 开始 Ai00 有了一个独特功能:BNF 采样。这个采样法通过限定模型能够选择的 tokens 来使得模型强行输出符合一定格式的文本(比如 JSON 或者 Markdown 等等)。

以下是一个强行让模型输出有 "name"、"age" 和 "job" 字段的 JSON 的 BNF:

start ::= json_object;
json_object ::= "{\n" object_members "\n}";
object_members ::= json_member | json_member ",\n" object_members;
json_member ::= "\t" json_key ": " json_value;
json_key ::= '"' "name" '"' | '"' "age" '"' | '"' "job" '"';
json_value ::= json_string | json_number;
json_string ::= '"'content'"';
content ::= #"\\w*";
json_number ::= positive_digit digits|'0';
digits ::= digit|digit digits;
digit ::= '0'|positive_digit;
positive_digit::="1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9";

📙WebUI 截图

对话功能

续写功能

写论文功能

📝TODO List

  • [x] 支持text_completionschat_completions
  • [x] 支持sse推送
  • [x] 集成基本的调用前端
  • [x] Batch serve并行推理
  • [x] int8量化支持
  • [x] nf4量化支持
  • [x] LoRA模型支持
  • [x] 支持加载微调的初始状态
  • [ ] LoRA模型热加载、切换
  • [x] 初始状态动态加载、切换
  • [x] BNF采样

👥Join Us

我们一直在寻找有兴趣帮助我们改进项目的人。如果你对以下任何一项感兴趣,请加入我们!

  • 💀编写代码
  • 💬提供反馈
  • 🔆提出想法或需求
  • 🔍测试新功能
  • ✏翻译文档
  • 📣推广项目
  • 🏅其他任何会对我们有所帮助的事

无论你的技能水平如何,我们都欢迎你加入我们。你可以通过以下方式加入我们:

  • 加入我们的 Discord 频道
  • 加入我们的 QQ 群
  • 在 GitHub 上提交问题或拉取请求
  • 在我们的网站上留下反馈

我们迫不及待地想与你合作,让这个项目变得更好!希望项目对你有帮助!

Thanks

cryscan 感谢cryscan的辛勤付出,为项目做出了杰出的贡献。

感谢下面项目的编写者们做出的杰出工作

顾真牛 顾真牛 📖 💻 🖋 🎨 🧑‍🏫 研究社交 研究社交 💻 💡 🤔 🚧 👀 📦 josc146 josc146 🐛 💻 🤔 🔧 l15y l15y 🔧 🔌 💻

感谢下面又好看又有眼光又优秀的杰出人士对项目的支持和无私奉献

  • 来自 QQ 群

    image

  • 来自 Github

  • 来自 Discord

我们很感激您的帮助,我们很高兴能与您合作。

Stargazers over time

Stargazers over time

Extension points exported contracts — how you extend this code

AsPointer (Interface)
Trait to access raw pointers from safe types which wrap unsafe [`ort_sys`] types. [21 implementers]
crates/ort-patch/src/lib.rs
Sampler (Interface)
(no doc) [3 implementers]
crates/ai00-core/src/sampler/mod.rs
ExecutionProvider (Interface)
ONNX Runtime works with different hardware acceleration libraries through its extensible **Execution Providers (EP) fram [18 …
crates/ort-patch/src/execution_providers/mod.rs
ModelSerialize (Interface)
(no doc) [1 implementers]
crates/ai00-core/src/lib.rs
ArbitrarilyConfigurableExecutionProvider (Interface)
Trait used for execution providers that can have arbitrary configuration keys applied. Most execution providers have a [7 …
crates/ort-patch/src/execution_providers/mod.rs
AsTokenSlice (Interface)
(no doc) [1 implementers]
crates/ai00-core/src/run.rs
ValueTypeMarker (Interface)
Marker trait used to determine what operations can and cannot be performed on a [`Value`] of a given type. For example, [7 …
crates/ort-patch/src/value/mod.rs
Formatter (Interface)
(no doc) [1 implementers]
crates/ai00-core/src/sampler/mod.rs

Core symbols most depended-on inside this repo

iter
called by 108
crates/ort-patch/src/session/output.rs
clone
called by 97
crates/ort-patch/src/memory.rs
set
called by 91
crates/ort-patch/src/execution_providers/mod.rs
push
called by 79
crates/ai00-core/src/lib.rs
len
called by 61
crates/ort-patch/src/session/output.rs
as_ptr
called by 49
crates/ort-patch/src/memory.rs
into_iter
called by 49
crates/ort-patch/src/session/output.rs
status_to_result
called by 34
crates/ort-patch/src/error.rs

Shape

Method 675
Class 178
Function 112
Enum 45
Interface 26

Languages

Rust98%
Python2%

Modules by API surface

crates/ort-patch/src/execution_providers/tensorrt.rs47 symbols
crates/ai00-core/src/run.rs45 symbols
crates/ort-patch/src/session/mod.rs37 symbols
crates/ai00-core/src/lib.rs36 symbols
crates/ort-patch/src/memory.rs32 symbols
crates/ort-patch/src/session/builder/impl_options.rs29 symbols
crates/ort-patch/src/value/mod.rs28 symbols
crates/ort-patch/src/execution_providers/cuda.rs27 symbols
crates/ort-patch/src/environment.rs27 symbols
crates/ort-patch/src/session/output.rs26 symbols
crates/ort-patch/src/operator/kernel.rs26 symbols
crates/ort-patch/src/execution_providers/qnn.rs25 symbols

For agents

$ claude mcp add ai00_server \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page