@@ -3,6 +3,7 @@ use chrono::Utc;
33use clap:: { Args , Subcommand } ;
44use serde:: Deserialize ;
55use std:: collections:: HashMap ;
6+ use std:: time:: Duration ;
67use strum:: IntoEnumIterator ;
78
89use crate :: {
@@ -66,7 +67,7 @@ impl ModelsArgs {
6667 }
6768 }
6869 ModelsAction :: Update => {
69- let supported: Vec < & str > = Provider :: iter ( ) . map ( |p| p. models_dev_id ( ) ) . collect ( ) ;
70+ let supported: Vec < String > = Provider :: iter ( ) . map ( |p| p. to_string ( ) ) . collect ( ) ;
7071
7172 crate :: output:: progress ( "Fetching models from models.dev..." , output_level) ;
7273
@@ -240,15 +241,21 @@ struct ModelsDevModel {
240241 id : Option < String > ,
241242}
242243
243- async fn fetch_models_from_models_dev ( supported_providers : & [ & str ] ) -> Result < Vec < String > > {
244- let response = reqwest:: get ( "https://models.dev/api.json" )
244+ async fn fetch_models_from_models_dev ( supported_providers : & [ String ] ) -> Result < Vec < String > > {
245+ let client = reqwest:: Client :: builder ( )
246+ . timeout ( Duration :: from_secs ( 10 ) )
247+ . build ( ) ?;
248+
249+ let response = client
250+ . get ( "https://models.dev/api.json" )
251+ . send ( )
245252 . await ?
246253 . error_for_status ( ) ?;
247254 let providers: HashMap < String , ModelsDevProvider > = response. json ( ) . await ?;
248255
249256 let mut all_models = Vec :: new ( ) ;
250257 for provider_id in supported_providers {
251- if let Some ( provider) = providers. get ( * provider_id) {
258+ if let Some ( provider) = providers. get ( provider_id) {
252259 for ( model_id, model) in & provider. models {
253260 let id = model. id . as_deref ( ) . unwrap_or ( model_id) ;
254261 all_models. push ( format ! ( "{provider_id}:{id}" ) ) ;
0 commit comments