@@ -238,6 +238,17 @@ def get_available_models(provider_clients: ProviderClients, provider: ModelProvi
238
238
logging .error ("Error fetching models from %s: %s" , provider .value , str (e ))
239
239
return []
240
240
241
+ @staticmethod
242
+ def validate_model (provider_clients : ProviderClients , provider : ModelProvider , model : str ) -> bool :
243
+ """
244
+ Validates whether the specified model is available for the given provider.
245
+ Uses prefix matching so that a shorthand (e.g. "claude") will match a full model name.
246
+ """
247
+ available_models = ModelManager .get_available_models (provider_clients , provider )
248
+ if not available_models :
249
+ return False
250
+ return any (avail .lower ().startswith (model .lower ()) for avail in available_models )
251
+
241
252
242
253
class TranslationService :
243
254
"""Class to encapsulate translation functionalities."""
@@ -821,6 +832,7 @@ def parse_args():
821
832
return parser .parse_args ()
822
833
823
834
835
+ # pylint: disable=too-many-branches
824
836
def main ():
825
837
"""Main function to parse arguments and initiate processing."""
826
838
args = parse_args ()
@@ -871,17 +883,22 @@ def main():
871
883
ModelProvider .DEEPSEEK : "deepseek-chat"
872
884
}
873
885
874
- # Use specified model or default for the provider
875
- model = args .model or default_models .get (provider )
876
-
877
- # Validate the selected model is available
878
- if not model_manager .validate_model (provider_clients , provider , model ):
879
- logging .warning (
880
- "Model '%s' not found for provider %s. "
881
- "Using default model %s." ,
882
- model , provider .value , default_models .get (provider )
883
- )
884
- model = default_models .get (provider )
886
+ if args .model :
887
+ model = args .model
888
+ if not model_manager .validate_model (provider_clients , provider , model ):
889
+ logging .warning (
890
+ "Model '%s' not found for provider %s. Using default model %s." ,
891
+ model , provider .value , default_models .get (provider )
892
+ )
893
+ model = default_models .get (provider )
894
+ else :
895
+ available_models = model_manager .get_available_models (provider_clients , provider )
896
+ if available_models :
897
+ model = available_models [0 ]
898
+ logging .info ("No model specified; using available model: %s" , model )
899
+ else :
900
+ model = default_models .get (provider )
901
+ logging .warning ("No available models found from API; defaulting to %s" , model )
885
902
886
903
# Parse language codes and detailed language names
887
904
lang_codes = [lang .strip () for lang in args .lang .split (',' )]
0 commit comments