Translator stack
Three CLI-facing modes (see doctranslate.translator.factory.build_translators):
1. Legacy OpenAI (--translator openai)
- Builds one or two
OpenAITranslatorinstances from CLI--openai*flags and env (OPENAI_API_KEY, etc.). - Use for single-provider OpenAI-compatible setups without nested TOML.
- Transport:
OpenAITranslatordelegates toOpenAILLMTransport(doctranslate/translator/providers/openai_client.py): for the default OpenAI host (no custom--openai-base-url), Responses API is tried first for plain text; chat completions are used for JSON mode, Pydantic structured parse (chat.completions.parse) when the pipeline passesstructured_response_modelinrate_limit_params, and as fallback if Responses fails or the gateway is custom / OpenAI-compatible. - Shared helpers: token usage normalization and JSON cleanup live under
doctranslate/translator/llm/.
2. Router (--translator router)
- Requires
--configTOML with[doctranslate], nestedprofiles, andproviders. - Loads
NestedTranslatorConfigviaload_nested_translator_config; validates withvalidate_router_config. - Builds two
TranslatorRouterinstances: paragraph profile (routing_profile) and term extraction profile (term_extraction_profile). - Strategies:
failover,round_robin,least_loaded,cost_aware. Failover respectsfallback_onand content-filter policy. - Details: Configuration, Multi-provider routing.
3. Local (--translator local)
- Single-machine / LAN backends: Ollama, vLLM, llama-cpp server, OpenAI-compatible URL.
local_config.convert_local_translator_to_router_nestedexpands local → synthetic router config, then same router path as (2).- Batching:
--local-*-batch-*flags and TOML keys map into translation config batch limits inmain.py. - Details: Local translation.
Config merge (router / nested TOML)
Documented in Configuration: defaults → TOML [doctranslate] → env for api_key_env → CLI overrides for router-only flags.
Pitfalls for agents
- Do not assume “translator” means only OpenAI; check
translator_modeandbuild_translatorsdispatch. - Term extraction often needs JSON-capable providers; profiles may set
require_json_mode = true. - Changing provider ids, models, or base URLs affects cache keys; tests or users may need
--ignore-cache. - After changing flags or TOML schema, update docs and tests under
tests/test_translator_*,tests/test_local_*,tests/test_main_cli_*as appropriate.