use omniference::{
server::OmniferenceServer,
types::{ProviderConfig, ProviderEndpoint, ProviderKind},
};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let _ = dotenvy::dotenv();
tracing_subscriber::fmt().with_env_filter(tracing_subscriber::EnvFilter::from_default_env()).init();
println!("🚀 Standalone Omniference Server");
println!("=================================");
let mut server = OmniferenceServer::new();
println!("📡 Adding Ollama provider...");
let ollama_base = std::env::var("OLLAMA_BASE_URL").unwrap_or_else(|_| "http://localhost:11434".to_string());
server
.add_provider(ProviderConfig {
name: "ollama".to_string(),
endpoint: ProviderEndpoint {
kind: ProviderKind::OpenAICompat,
base_url: ollama_base,
api_key: None,
extra_headers: std::collections::BTreeMap::new(),
timeout: Some(30000),
},
enabled: true,
catalog_provider_slug: None,
})
.await
.map_err(|e| anyhow::anyhow!(e))?;
println!("✅ Ollama provider configured");
let addr = std::env::var("SERVER_ADDR").unwrap_or_else(|_| "127.0.0.1:8080".to_string());
println!("\n🌐 Starting server on {}", addr);
println!("📋 Available endpoints:");
println!(" POST /api/openai/v1/responses");
println!(" POST /api/openai-compatible/v1/chat/completions");
println!(" GET /api/openai/v1/models");
println!(" GET /api/openai-compatible/v1/models");
println!("\n🔍 Example curl commands:");
println!(" # List models:");
println!(" curl http://localhost:8080/api/openai/v1/models");
println!();
println!(" # Responses request:");
println!(" curl -X POST http://localhost:8080/api/openai/v1/responses \\");
println!(" -H 'Content-Type: application/json' \\");
println!(" -d '{{");
println!(" \"model\": \"llama3.2\",");
println!(" \"input\": \"Hello!\"");
println!(" }}'");
server.run(&addr).await?;
Ok(())
}