use everruns_core::driver_registry::DriverRegistry;
use everruns_core::{CapabilityRegistry, DriverId, PlatformDefinition, ResolvedModel};
use everruns_runtime::InProcessRuntimeBuilder;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let Ok(api_key) = std::env::var("OPENAI_API_KEY") else {
eprintln!("OPENAI_API_KEY is not set; skipping the live OpenAI turn.");
eprintln!("Set it and re-run: export OPENAI_API_KEY=sk-...");
return Ok(());
};
let model = std::env::var("OPENAI_MODEL").unwrap_or_else(|_| "gpt-5.5".to_string());
let mut drivers = DriverRegistry::new();
everruns_openai::register_driver(&mut drivers);
let platform = PlatformDefinition::new(CapabilityRegistry::new(), drivers);
let runtime = InProcessRuntimeBuilder::new()
.platform_definition(platform)
.default_model(ResolvedModel {
model,
provider_type: DriverId::OpenAI,
api_key: Some(api_key),
base_url: None,
provider_metadata: None,
})
.single_session(|s| {
s.harness("assistant", "You are a concise, helpful assistant.")
.agent("assistant-agent", "Answer in one short sentence.")
.session_title("OpenAI Session")
})
.build()
.await?;
let session_id = runtime
.default_session_id()
.expect("single_session sets the default session id");
let result = runtime
.run_text_turn(
session_id,
"Say hello from everruns-runtime in one sentence.",
)
.await?;
println!("success: {}", result.success);
println!("iterations: {}", result.iterations);
println!("response: {}", result.response);
if let Some(error) = result.error {
eprintln!("error: {error}");
}
Ok(())
}