llm-worker-rs/worker/examples/builder_basic.rs

53 lines
1.7 KiB
Rust

use std::collections::HashMap;
use worker::{LlmProvider, PromptError, SystemPromptContext, Worker};
use worker_types::Message;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Example 1: Basic system prompt generator
fn system_prompt(
ctx: &SystemPromptContext,
_messages: &[Message],
) -> Result<String, PromptError> {
Ok(format!(
"You are helping with requests for model {} (provider {}).",
ctx.model.model_name, ctx.model.provider_id
))
}
let mut api_keys = HashMap::new();
api_keys.insert("claude".to_string(), std::env::var("ANTHROPIC_API_KEY")?);
let mut blueprint = Worker::blueprint();
blueprint
.provider(LlmProvider::Claude)
.model("claude-3-sonnet-20240229")
.api_keys(api_keys)
.system_prompt_fn(system_prompt);
let worker = blueprint.instantiate()?;
println!("✅ Worker created with builder pattern");
println!(" Provider: {:?}", worker.get_provider_name());
println!(" Model: {}", worker.get_model_name());
// Example 2: Different prompt generator
fn reviewer_prompt(
_ctx: &SystemPromptContext,
_messages: &[Message],
) -> Result<String, PromptError> {
Ok("You are an expert code reviewer. Always provide constructive feedback.".to_string())
}
let mut reviewer_blueprint = Worker::blueprint();
reviewer_blueprint
.provider(LlmProvider::Claude)
.model("claude-3-sonnet-20240229")
.api_key("claude", std::env::var("ANTHROPIC_API_KEY")?)
.system_prompt_fn(reviewer_prompt);
let _worker2 = reviewer_blueprint.instantiate()?;
println!("✅ Worker created with custom role");
Ok(())
}