Skip to content

Commit 828d975

Browse files
Merge pull request #10 from pescheckit/feature_added-model-from-api
Added model from api
2 parents 6a210fe + 322b1eb commit 828d975

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Python GPT-4 PO File Translator
22

3+
[![Python Package CI](https://github.com/pescheckit/python-gpt-po/actions/workflows/ci.yml/badge.svg)](https://github.com/pescheckit/python-gpt-po/actions/workflows/ci.yml)
4+
35
A robust tool for translating gettext (.po) files using AI models from multiple providers (OpenAI, Anthropic / Claude, and DeepSeek). It supports both bulk and individual translations, handles fuzzy entries, and can infer target languages based on folder structures.
46

57
## Features

python_gpt_po/po_translator.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,17 @@ def get_available_models(provider_clients: ProviderClients, provider: ModelProvi
238238
logging.error("Error fetching models from %s: %s", provider.value, str(e))
239239
return []
240240

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+
241252

242253
class TranslationService:
243254
"""Class to encapsulate translation functionalities."""
@@ -821,6 +832,7 @@ def parse_args():
821832
return parser.parse_args()
822833

823834

835+
# pylint: disable=too-many-branches
824836
def main():
825837
"""Main function to parse arguments and initiate processing."""
826838
args = parse_args()
@@ -871,17 +883,22 @@ def main():
871883
ModelProvider.DEEPSEEK: "deepseek-chat"
872884
}
873885

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)
885902

886903
# Parse language codes and detailed language names
887904
lang_codes = [lang.strip() for lang in args.lang.split(',')]

0 commit comments

Comments
 (0)