1
1
use crate :: {
2
2
apis:: { JinaConfig , SerperConfig } ,
3
- providers:: { GeminiConfig , OllamaConfig , OpenAIConfig } ,
3
+ providers:: { GeminiConfig , OllamaConfig , OpenAIConfig , OpenRouterConfig } ,
4
4
split_csv_line, Model , ModelProvider ,
5
5
} ;
6
6
use eyre:: { eyre, Result } ;
@@ -19,6 +19,9 @@ pub struct DriaWorkflowsConfig {
19
19
/// Gemini configurations, e.g. API key, in case Gemini is used.
20
20
/// Otherwise, can be ignored.
21
21
pub gemini : GeminiConfig ,
22
+ /// OpenRouter configurations, e.g. API key, in case OpenRouter is used.
23
+ /// Otherwise, can be ignored.
24
+ pub openrouter : OpenRouterConfig ,
22
25
/// Serper configurations, e.g. API key, in case Serper is given in environment.
23
26
/// Otherwise, can be ignored.
24
27
pub serper : SerperConfig ,
@@ -39,6 +42,7 @@ impl DriaWorkflowsConfig {
39
42
models : models_and_providers,
40
43
ollama : OllamaConfig :: new ( ) ,
41
44
openai : OpenAIConfig :: new ( ) ,
45
+ openrouter : OpenRouterConfig :: new ( ) ,
42
46
gemini : GeminiConfig :: new ( ) ,
43
47
serper : SerperConfig :: new ( ) ,
44
48
jina : JinaConfig :: new ( ) ,
@@ -230,6 +234,18 @@ impl DriaWorkflowsConfig {
230
234
) ;
231
235
}
232
236
237
+ // if OpenRouter is a provider, check that the API key is set
238
+ if unique_providers. contains ( & ModelProvider :: OpenRouter ) {
239
+ let provider_models = self . get_models_for_provider ( ModelProvider :: OpenRouter ) ;
240
+ good_models. extend (
241
+ self . openrouter
242
+ . check ( provider_models)
243
+ . await ?
244
+ . into_iter ( )
245
+ . map ( |m| ( ModelProvider :: OpenRouter , m) ) ,
246
+ ) ;
247
+ }
248
+
233
249
// update good models
234
250
if good_models. is_empty ( ) {
235
251
Err ( eyre ! ( "No good models found, please check logs for errors." ) )
0 commit comments