@@ -77,6 +77,10 @@ pub struct DeclarativeProviderConfig {
7777 #[ serde( default ) ]
7878 pub skip_canonical_filtering : bool ,
7979 #[ serde( default , deserialize_with = "deserialize_non_empty_string" ) ]
80+ pub model_doc_link : Option < String > ,
81+ #[ serde( default ) ]
82+ pub setup_steps : Vec < String > ,
83+ #[ serde( default , deserialize_with = "deserialize_non_empty_string" ) ]
8084 pub fast_model : Option < String > ,
8185}
8286
@@ -233,6 +237,8 @@ pub fn create_custom_provider(
233237 env_vars : None ,
234238 dynamic_models : None ,
235239 skip_canonical_filtering : false ,
240+ model_doc_link : None ,
241+ setup_steps : vec ! [ ] ,
236242 fast_model : None ,
237243 } ;
238244
@@ -300,6 +306,8 @@ pub fn update_custom_provider(params: UpdateCustomProviderParams) -> Result<()>
300306 env_vars : existing_config. env_vars ,
301307 dynamic_models : existing_config. dynamic_models ,
302308 skip_canonical_filtering : existing_config. skip_canonical_filtering ,
309+ model_doc_link : existing_config. model_doc_link ,
310+ setup_steps : existing_config. setup_steps ,
303311 fast_model : existing_config. fast_model . clone ( ) ,
304312 } ;
305313
@@ -587,6 +595,33 @@ mod tests {
587595 serde_json:: from_str ( json) . expect ( "groq.json should parse without env_vars" ) ;
588596 assert ! ( config. env_vars. is_none( ) ) ;
589597 assert ! ( config. dynamic_models. is_none( ) ) ;
598+ assert ! ( config. model_doc_link. is_none( ) ) ;
599+ assert ! ( config. setup_steps. is_empty( ) ) ;
600+ }
601+
602+ #[ test]
603+ fn test_nvidia_json_deserializes ( ) {
604+ let json = include_str ! ( "../providers/declarative/nvidia.json" ) ;
605+ let config: DeclarativeProviderConfig =
606+ serde_json:: from_str ( json) . expect ( "nvidia.json should parse" ) ;
607+ assert_eq ! ( config. name, "nvidia" ) ;
608+ assert_eq ! ( config. display_name, "NVIDIA" ) ;
609+ assert ! ( matches!( config. engine, ProviderEngine :: OpenAI ) ) ;
610+ assert_eq ! ( config. api_key_env, "NVIDIA_API_KEY" ) ;
611+ assert_eq ! ( config. base_url, "https://integrate.api.nvidia.com/v1" ) ;
612+ assert_eq ! ( config. catalog_provider_id, Some ( "nvidia" . to_string( ) ) ) ;
613+ assert_eq ! ( config. dynamic_models, Some ( true ) ) ;
614+ assert_eq ! ( config. supports_streaming, Some ( true ) ) ;
615+ assert ! ( !config. skip_canonical_filtering) ;
616+ assert_eq ! (
617+ config. model_doc_link,
618+ Some ( "https://build.nvidia.com/models" . to_string( ) )
619+ ) ;
620+ assert_eq ! ( config. setup_steps. len( ) , 4 ) ;
621+
622+ assert_eq ! ( config. models. len( ) , 1 ) ;
623+ assert_eq ! ( config. models[ 0 ] . name, "z-ai/glm-4.7" ) ;
624+ assert_eq ! ( config. models[ 0 ] . context_limit, 131072 ) ;
590625 }
591626
592627 #[ test]
0 commit comments