#[path = "common/mod.rs"]
mod common;
use futures_util::StreamExt;
use lellm_core::{ChatRequest, LlmError, ToolCall};
use lellm_provider::{LlmProvider, ProviderEvent};
#[tokio::main]
async fn main() -> Result<(), LlmError> {
let provider = common::create_openai_provider();
let request = ChatRequest::user_prompt("用三句话介绍 Rust 编程语言。".into());
let mut stream = provider.stream(&request).await?;
let mut tool_calls: Vec<ToolCall> = Vec::new();
while let Some(event) = stream.next().await {
match event? {
ProviderEvent::Start { model } => {
eprintln!("[开始] model={}", model);
}
ProviderEvent::Token { token } => {
print!("{}", token);
std::io::Write::flush(&mut std::io::stdout()).ok();
}
ProviderEvent::Done {
tool_calls: tc,
usage,
} => {
println!();
tool_calls = tc;
if let Some(u) = usage {
eprintln!(
"[完成] tokens={}, usage=prompt={},completion={}",
u.total_tokens, u.prompt_tokens, u.completion_tokens,
);
}
}
}
}
if !tool_calls.is_empty() {
eprintln!("[Tool Calls] {} 个工具调用", tool_calls.len());
for tc in &tool_calls {
eprintln!(" - {}({})", tc.name, tc.arguments);
}
}
Ok(())
}