3 个版本
新版本 0.1.3 | 2024 年 8 月 19 日 |
---|---|
0.1.1 | 2024 年 8 月 19 日 |
0.1.0 | 2024 年 8 月 19 日 |
1494 在 网页编程
67KB
2K SLoC
openai-ng
适用于 Rust 和 tokio 的与 OpenAI 兼容的 API SDK,拥有大量 builder
。
‼️ 不要用它来处理重要项目! ‼️
测试的 LLM API 服务
LLM 供应商 | 聊天 | 聊天流 | 文件 | 图像生成 |
---|---|---|---|---|
Kimi | ✅ | ✅ | ✅ | ❌ |
Stepfun | ✅ | ✅ | ✅ | ✅ |
OpenAI | ﹖ | ﹖ | ﹖ | ﹖ |
- ✅ 测试并通过
- ❌ 不可用
- ﹖ 未测试
入门指南
use openai_ng::prelude::*;
// all api call should be run in `tokio` runtime
#[tokio::main]
async fn main() -> Result<()> {
// build a client
let client = Client::builder()
.with_base_url("https://api.stepfun.com")?
.with_key("you api key")?
.with_version("v1")?
.build()?;
// build a request
let req = ChatCompletionRequest::builder()
.with_model("step-1-8k")
.with_messages([
Message::builder()
.with_role(Role::system)
.with_content("you are a good llm model")
.build(),
Message::builder()
.with_role(Role::user)
.with_content("calculate 1921.23 + 42.00")
.build(),
])
.with_tools([Function::builder()
.with_name("add_number")
.with_description("add two numbers")
.with_parameters(
Parameters::builder()
.add_property(
"a",
ParameterProperty::builder()
.with_description("number 1 in 2 numbers")
.with_type(ParameterType::number)
.build()?,
true,
)
.add_property(
"b",
ParameterProperty::builder()
.with_description("number 2 in 2 numbers")
.with_type(ParameterType::number)
.build()?,
true,
)
.build()?,
)
.build()?])
.with_stream(false) // if true, the response will be a stream
.build()?;
// call request
let res = req.call(&client, None).await?;
// base on with_stream, the rep will be different
let rep = match res {
// will return result at once
ChatCompletionResult::Response(rep) => rep,
// will return a async receiver of ChatCompletionStreamData
ChatCompletionResult::Delta(mut rx) => {
let mut rep_total = ChatCompletionResponse::default();
while let Some(res) = rx.recv().await {
match res {
Ok(rep) => {
rep_total.merge_delta(rep);
}
Err(e) => {
error!("failed to recv rep: {:?}", e);
break;
}
}
}
rep_total
}
};
// log and print result
for l in serde_json::to_string_pretty(&rep)?.lines() {
info!("FINAL REP: {}", l);
}
Ok(())
}
关于示例代码,将返回类似以下的 rep
{
"id": "7cd553bc5e20f38a411e5a9935da2e2c.94a60989e4b9393614b28ea9d307fc11",
"object": "chat.completion",
"created": 1724078352,
"model": "step-1-8k",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_Glo0ppwORpmSjaIJGCdG-g",
"type": "function",
"function": {
"name": "add_number",
"arguments": "{\"a\": 1921.23, \"b\": 42.0}"
}
}
]
},
"finish_reason": "stop"
}
],
"usage": {
"completion_tokens": 30,
"prompt_tokens": 143,
"total_tokens": 173
}
}
依赖项
~9–39MB
~622K SLoC