Skip to content

cltk.translation

Translation layer for GenAI-driven annotations.

GenAITranslationProcess

Bases: Process

Language-agnostic translation process using a generative GPT model.

glottolog_id class-attribute instance-attribute

glottolog_id: Optional[str] = None

process_id class-attribute

process_id: str = 'translation.genai'

prompt_builder class-attribute instance-attribute

prompt_builder: Optional[TranslationPromptBuilder] = None

target_language class-attribute instance-attribute

target_language: str = 'Modern US English'

target_language_id class-attribute instance-attribute

target_language_id: Optional[str] = 'en-US'

prompt_profile class-attribute instance-attribute

prompt_profile: Optional[str] = None

prompt_version class-attribute instance-attribute

prompt_version: Optional[str] = None

algorithm cached property

algorithm: Callable[..., Doc]

Return the translation generation function for this process.

run

run(input_doc: Doc) -> Doc

Run the configured GPT translation workflow.

Source code in cltk/translation/processes.py
def run(self, input_doc: Doc) -> Doc:
    """Run the configured GPT translation workflow."""
    output_doc: Doc = copy(input_doc)
    if not output_doc.words:
        msg = "Doc must have `words` with prior annotations before translation."
        bind_from_doc(output_doc).error(msg)
        raise ValueError(msg)
    target_language = self.target_language
    target_language_id = self.target_language_id
    try:
        meta = output_doc.metadata
        if isinstance(meta, dict):
            target_language = meta.get(
                "translation_target_language", target_language
            )
            target_language_id = meta.get(
                "translation_target_language_id", target_language_id
            )
    except Exception:
        pass
    prompt_builder = self.prompt_builder
    prompt_digest = None
    if prompt_builder is None and self.prompt_profile:
        template = PromptProfileRegistry.get_prompt(
            self.prompt_profile, self.process_id, self.prompt_version
        )
        prompt_digest = template.digest

        def _builder(
            lang: str,
            target: str,
            context: str,
            _template: PromptTemplate = template,
        ) -> PromptInfo:
            """Build a translation prompt from a profile template."""
            return build_prompt_info(
                _template,
                lang_or_dialect_name=lang,
                target_language=target,
                context=context,
            )

        prompt_builder = _builder
    output_doc = self.algorithm(
        output_doc,
        target_language=target_language,
        target_language_id=target_language_id,
        prompt_builder=prompt_builder,
        prompt_profile=self.prompt_profile,
        prompt_digest=prompt_digest,
        provenance_process=f"{self.process_id}:{self.__class__.__name__}",
    )
    return output_doc

Submodules