53 lines
1.7 KiB
Rust
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(())
|
|
}
|