diff --git a/lib/crates/fabro-llm/tests/integration.rs b/lib/crates/fabro-llm/tests/integration.rs index fff3d4050..5f3db994f 100644 --- a/lib/crates/fabro-llm/tests/integration.rs +++ b/lib/crates/fabro-llm/tests/integration.rs @@ -7,7 +7,9 @@ use std::sync::Arc; use fabro_llm::error::ProviderErrorKind; use fabro_llm::provider::ProviderAdapter; -use fabro_llm::providers::{AnthropicAdapter, GeminiAdapter, OpenAiAdapter}; +use fabro_llm::providers::{ + AnthropicAdapter, GeminiAdapter, OpenAiAdapter, OpenAiCompatibleAdapter, +}; use fabro_llm::types::{FinishReason, Message, Request}; use fabro_model::Catalog; use fabro_static::EnvVars; @@ -174,6 +176,24 @@ async fn gemini_complete() { assert_eq!(response.provider, "gemini"); } +#[fabro_macros::e2e_test(live("OPENROUTER_API_KEY"))] +async fn openrouter_complete() { + let api_key = + std::env::var(EnvVars::OPENROUTER_API_KEY).expect("OPENROUTER_API_KEY must be set"); + let adapter = OpenAiCompatibleAdapter::new(api_key, "https://openrouter.ai/api/v1") + .with_name("openrouter"); + let request = make_request("deepseek/deepseek-v4-flash"); + let response = adapter.complete(&request).await.unwrap(); + + assert!( + !response.text().is_empty(), + "response text should not be empty" + ); + assert!(response.usage.input_tokens > 0); + assert!(response.usage.output_tokens > 0); + assert_eq!(response.provider, "openrouter"); +} + async fn run_multi_turn_cache_test( adapter: &dyn ProviderAdapter, model: &str,