From 7709cbefcb10bbc0693b8d37fea2fcdbb49e3f44 Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Wed, 27 May 2026 13:11:03 -0400 Subject: [PATCH] test(llm): add live e2e test for OpenRouter Add openrouter_complete in fabro-llm integration tests, gated by OPENROUTER_API_KEY. Verifies the OpenAI-compatible adapter configured with OpenRouter's base URL and provider name "openrouter" can complete a request against the live API and return usable token counts. Uses deepseek/deepseek-v4-flash as the live model since it's the cheapest entry in the catalog. Co-Authored-By: Claude Opus 4.7 (1M context) --- lib/crates/fabro-llm/tests/integration.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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,