Skip to content

Translation Task

multilingual_translation(target_languages=["ja"]) requests only Japanese and produces a schema with only the required ja field. Pass multiple supported language codes to request several translations; omitting target_languages preserves the original all-51-language response model (TranslatedString). Empty, duplicate, and unknown codes are rejected.

The Icelandic JSON key is is: access it in Python as result.is_, and use result.model_dump(by_alias=True) to serialize language-code keys. The full model still accepts is_ when validating older Python-side data.

openaivec.task.nlp.translation

Multilingual translation task definition.

Classes

TranslatedString

Bases: BaseModel

Translations for a fixed set of language-code fields.

Functions:

multilingual_translation

multilingual_translation(
    target_languages: Sequence[str] | None = None,
) -> PreparedTask[BaseModel]

Create a translation task for selected language codes.

Parameters:

Name Type Description Default
target_languages Sequence[str] | None

Language codes to translate into. None (the default) requests all 51 supported languages. Use is for Icelandic; the Python attribute remains is_ for compatibility.

None

Returns:

Type Description
PreparedTask[BaseModel]

PreparedTask[BaseModel]: Task with exactly the requested response fields.

Raises:

Type Description
TypeError

If target_languages is a string rather than a sequence.

ValueError

If the selection is empty, duplicated, or unsupported.

Source code in src/openaivec/task/nlp/translation.py
def multilingual_translation(target_languages: Sequence[str] | None = None) -> PreparedTask[BaseModel]:
    """Create a translation task for selected language codes.

    Args:
        target_languages (Sequence[str] | None): Language codes to translate into.
            ``None`` (the default) requests all 51 supported languages. Use ``is``
            for Icelandic; the Python attribute remains ``is_`` for compatibility.

    Returns:
        PreparedTask[BaseModel]: Task with exactly the requested response fields.

    Raises:
        TypeError: If target_languages is a string rather than a sequence.
        ValueError: If the selection is empty, duplicated, or unsupported.
    """
    supported = {field.alias or name: name for name, field in TranslatedString.model_fields.items()}
    if isinstance(target_languages, str):
        raise TypeError("target_languages must be a sequence of language codes, not a string")
    codes = tuple(supported) if target_languages is None else tuple(target_languages)
    if (
        not codes
        or any(not isinstance(code, str) or code not in supported for code in codes)
        or len(codes) != len(set(codes))
    ):
        raise ValueError("target_languages must contain unique supported language codes")
    response_format = TranslatedString
    if target_languages is not None:
        fields: dict[str, Any] = {
            supported[code]: (str, TranslatedString.model_fields[supported[code]]) for code in codes
        }
        response_format = create_model(
            "SelectedTranslations",
            __config__=ConfigDict(extra="forbid", populate_by_name=True),
            __module__=__name__,
            **fields,
        )
    return PreparedTask(
        instructions=_build_instructions(codes),
        response_format=response_format,
    )