#ollama #model #completion #embedding #api #generation #show

ollama-rs-mangle-fork

Rust 用于与 Ollama API 交互的库

1 个不稳定版本

0.1.1 2023 年 11 月 21 日

#529 in 机器学习


smart-llamas 中使用

自定义许可

37KB
741

Ollama-rs

一个简单易用的库,用于与 Ollama 服务器交互。

它遵循 Ollama API 文档制作。

安装

将 ollama-rs 添加到您的 Cargo.toml

[dependencies]
ollama-rs = "0.1.1"

初始化 Ollama

// By default it will connect to localhost:11434
let ollama = Ollama::default();

// For custom values:
let ollama = Ollama::new("https://127.0.0.1".to_string(), 11434);

使用

您可以自由查看 聊天机器人示例,该示例展示了如何使用此库在 50 行代码以下创建一个简单的聊天机器人。

这些示例为了简单起见使用了较差的错误处理,但您应该在您的代码中正确处理错误。

完成生成

let model = "llama2:latest".to_string();
let prompt = "Why is the sky blue?".to_string();

let res = ollama.generate(GenerationRequest::new(model, prompt)).await;

if let Ok(res) = res {
    println!("{}", res.response);
}

输出: 天空之所以呈现蓝色,是因为一种称为瑞利散射的现象...

完成生成(流式传输)

需要 stream 功能。

let model = "llama2:latest".to_string();
let prompt = "Why is the sky blue?".to_string();

let mut stream = ollama.generate_stream(GenerationRequest::new(model, prompt)).await.unwrap();

let mut stdout = tokio::io::stdout();
while let Some(res) = stream.next().await {
    let res = res.unwrap();
    stdout.write(res.response.as_bytes()).await.unwrap();
    stdout.flush().await.unwrap();
}

与上面的输出相同,但为流式传输。

列出本地模型

let res = ollama.list_local_models().await.unwrap();

返回一个包含 Model 结构体的向量。

显示模型信息

let res = ollama.show_model_info("llama2:latest".to_string()).await.unwrap();

返回一个 ModelInfo 结构体。

创建模型

let res = ollama.create_model("model".into(), "/tmp/Modelfile.example".into()).await.unwrap();

返回一个表示模型创建最终状态的 CreateModelStatus 结构体。

创建模型(流式传输)

需要 stream 功能。

let mut res = ollama.create_model_stream("model".into(), "/tmp/Modelfile.example".into()).await.unwrap();

while let Some(res) = res.next().await {
    let res = res.unwrap();
    // Handle the status
}

返回一个 CreateModelStatusStream,它将流式传输模型创建的每个状态更新。

复制模型

let _ = ollama.copy_model("mario".into(), "mario_copy".into()).await.unwrap();

删除模型

ollama.delete_model("mario_copy".into()).await.unwrap();

生成嵌入

let prompt = "Why is the sky blue?".to_string();
let res = ollama.generate_embeddings("llama2:latest".to_string(), prompt, None).await.unwrap();

返回一个包含嵌入(浮点向量)的 GenerateEmbeddingsResponse 结构体。

依赖项

~3–16MB
~237K SLoC