Skip to main content

ALDashboard.translation

gpt_is_available

def gpt_is_available() -> bool

Return True if the GPT API is available.

may_have_mako

def may_have_mako(text: str) -> bool

Return True if the text appears to contain any Mako code, such as ${...} or % at the beginning of a line.

may_have_html

def may_have_html(text: str) -> bool

Return True if the text appears to contain any HTML code, such as <p> or <div>.

translate_fragments_gpt

def translate_fragments_gpt(
fragments: Union[str, List[Tuple[int, str]]],
source_language: str,
tr_lang: str,
interview_context: Optional[str] = None,
special_words: Optional[Dict[int, str]] = None,
model="gpt-4.1-nano",
openai_base_url: Optional[str] = None,
max_output_tokens: Optional[int] = None,
max_input_tokens: Optional[int] = None,
openai_api: Optional[str] = None) -> Dict[int, str]

Use an AI model to translate a list of fragments (strings) from one language to another and provide a dictionary with the original text and the translated text.

You can optionally provide an alternative model, but it must support JSON mode.

Arguments

  • fragments - A list of strings to be translated.
  • source_language - The language of the original text.
  • tr_lang - The language to translate the text into.
  • special_words - A dictionary of special words that should be translated in a specific way.
  • model - The GPT model to use. The default is "gpt-4.1-nano"
  • openai_base_url - The base URL for the OpenAI API. If not provided, the default OpenAI URL will be used.
  • max_output_tokens - The maximum number of tokens to generate in the output.
  • max_input_tokens - The maximum number of tokens in the input. If not provided, it will be set to 4000.
  • openai_api - The OpenAI API key. If not provided, it will use the key from the configuration.

Returns

A dictionary where the keys are the indices of the fragments and the values are the translated text.

Translation Objects

class Translation(NamedTuple)

file: DAFile

an XLSX or XLIFF file

untranslated_segments: int

Number of rows in the output that have untranslated text - one for each question, subquestion, field, etc.

translation_file

def translation_file(yaml_filename: str,
tr_lang: str,
use_gpt=False,
use_google_translate=False,
openai_api: Optional[str] = None,
max_tokens=4000,
interview_context: Optional[str] = None,
special_words: Optional[Dict[int, str]] = None,
model: Optional[str] = None,
openai_base_url: Optional[str] = None,
max_input_tokens: Optional[int] = None,
max_output_tokens: Optional[int] = None) -> Translation

Return a tuple of the translation file in XLSX format, plus a count of the number of words and segments that need to be translated.

The word and segment count only apply when filetype="XLSX".

This code was adjusted from the Flask endpoint-only version in server.py. XLIFF support was removed for now but can be added later.