8 个版本

0.2.51 2024 年 6 月 26 日
0.2.5 2024 年 6 月 26 日
0.1.5 2024 年 6 月 24 日

#606 in 网页编程

Download history 469/week @ 2024-06-19 434/week @ 2024-06-26 74/week @ 2024-07-03 1/week @ 2024-07-17 44/week @ 2024-07-24 4/week @ 2024-07-31 29/week @ 2024-08-07

每月 78 次下载

Apache-2.0

38KB
506

非官方 Groq API Rust 客户端库

此库提供与 Groq API 交互的能力。它允许您通过 GroqClient 接口向 API 发送请求并接收响应。

如何安装

要安装 groq-api-rust crate,请在项目目录中运行以下命令将其添加到 Rust 项目的依赖项中

cargo add groq-api-rust

使用方法

  1. groq-api-rust crate 导入到您的 Rust 项目中。

  2. 通过调用 GroqClient::new() 并提供您的 Groq API 密钥和可选的端点 URL 来创建 GroqClient 结构体的实例。

  3. 使用 chat_completion() 方法在 GroqClient 实例上执行聊天补全。使用所需的模型、消息和其他参数创建一个 ChatCompletionRequest 结构体,并将其传递给 chat_completion() 方法。

  4. 使用 speech_to_text() 方法在 GroqClient 实例上执行语音转文本转换。使用音频文件数据和其他参数创建一个 SpeechToTextRequest 结构体,并将其传递给 speech_to_text() 方法。

示例

聊天补全

use groq_api_rust::{GroqClient, ChatCompletionMessage, ChatCompletionRoles, ChatCompletionRequest};
let api_key = std::env::var("GROQ_API_KEY").unwrap();
let client = GroqClient::new(api_key.to_string(), None);
let messages = vec![ChatCompletionMessage {
    role: ChatCompletionRoles::User,
    content: "Hello".to_string(),
    name: None,
}];
let request = ChatCompletionRequest::new("llama3-70b-8192", messages);
let response = client.chat_completion(request).unwrap();
println!("{}", response.choices[0].message.content);
assert!(!response.choices.is_empty());

语音转文本

use groq_api_rust::{GroqClient, SpeechToTextRequest};
use std::{fs::File, io::Read};
let api_key = std::env::var("GROQ_API_KEY").unwrap();
let client = GroqClient::new(api_key, None);
let audio_file_path = "audio_file.mp3";
let mut file = File::open(audio_file_path).expect("Failed to open audio file");
let mut audio_data = Vec::new();
file.read_to_end(&mut audio_data)
    .expect("Failed to read audio file");
let request = SpeechToTextRequest::new(audio_data)
    .temperature(0.7)
    .language("en")
    .model("whisper-large-v3");

let response = client
    .speech_to_text(request)
    .expect("Failed to get response");
println!("Speech to Text Response: {}", response.text);

异步聊天补全

use groq_api_rust::{AsyncGroqClient, ChatCompletionMessage,ChatCompletionRoles, ChatCompletionRequest};
use tokio;
let api_key = std::env::var("GROQ_API_KEY").unwrap();
let client = AsyncGroqClient::new(api_key, None);

let messages1 = vec![ChatCompletionMessage {
    role: ChatCompletionRoles::User,
    content: "Hello".to_string(),
    name: None,
}];
let request1 = ChatCompletionRequest::new("llama3-70b-8192", messages1);

let messages2 = vec![ChatCompletionMessage {
    role: ChatCompletionRoles::User,
    content: "How are you?".to_string(),
    name: None,
}];
let request2 = ChatCompletionRequest::new("llama3-70b-8192", messages2);

let (response1, response2) = tokio::join!(
    client.chat_completion(request1),
    client.chat_completion(request2)
);

let response1 = response1.expect("Failed to get response for request 1");
let response2 = response2.expect("Failed to get response for request 2");

println!("Response 1: {}", response1.choices[0].message.content);
println!("Response 2: {}", response2.choices[0].message.content);

异步语音转文本

use groq_api_rust::{AsyncGroqClient, SpeechToTextRequest};
use tokio;
let api_key = std::env::var("GROQ_API_KEY").unwrap();
let client = AsyncGroqClient::new(api_key, None);

let audio_file_path1 = "onepiece_demo.mp4";
let audio_file_path2 = "save.ogg";

let (audio_data1, audio_data2) = tokio::join!(
    tokio::fs::read(audio_file_path1),
    tokio::fs::read(audio_file_path2)
);

let audio_data1 = audio_data1.expect("Failed to read first audio file");
let audio_data2 = audio_data2.expect("Failed to read second audio file");

let (request1, request2) = (
    SpeechToTextRequest::new(audio_data1)
        .temperature(0.7)
        .language("en")
        .model("whisper-large-v3"),
    SpeechToTextRequest::new(audio_data2)
        .temperature(0.7)
        .language("en")
        .model("whisper-large-v3")
);
let (response1, response2) = tokio::join!(
    client.speech_to_text(request1),
    client.speech_to_text(request2)
);

let response1 = response1.expect("Failed to get response for first audio");
let response2 = response2.expect("Failed to get response for second audio");

println!("Speech to Text Response 1: {}", response1.text);
println!("Speech to Text Response 2: {}", response2.text);

待办事项

  • 实现请求的流式传输。

贡献

欢迎贡献!如果您有问题或想提出改进建议,请打开一个问题或提交一个拉取请求。

许可

此库根据 Apache 许可证 2.0 许可。有关更多信息,请参阅 LICENSE 文件。

依赖关系

~4–15MB
~217K SLoC