# Copyright (c) 2025 Patrick Motsch # All rights reserved. """ Translate Document action for AI operations. Translates documents to a target language while preserving formatting and structure. """ import logging from typing import Dict, Any from modules.workflows.methods.methodBase import action from modules.datamodels.datamodelChat import ActionResult logger = logging.getLogger(__name__) @action async def translateDocument(self, parameters: Dict[str, Any]) -> ActionResult: """ GENERAL: - Purpose: Translate documents to a target language while preserving formatting and structure. - Input requirements: documentList (required); targetLanguage (required). - Output format: Translated document in same format as input (default) or specified resultType. Parameters: - documentList (list, required): Document reference(s) to translate. - targetLanguage (str, required): Target language code or name (e.g., "de", "German", "French", "es"). - sourceLanguage (str, optional): Source language if known (e.g., "en", "English"). If not provided, AI will detect. - preserveFormatting (bool, optional): Whether to preserve original formatting. Default: True. - resultType (str, optional): Output file extension. If not specified, uses same format as input. """ documentList = parameters.get("documentList", []) if not documentList: return ActionResult.isFailure(error="documentList is required") targetLanguage = parameters.get("targetLanguage") if not targetLanguage: return ActionResult.isFailure(error="targetLanguage is required") sourceLanguage = parameters.get("sourceLanguage") preserveFormatting = parameters.get("preserveFormatting", True) resultType = parameters.get("resultType") aiPrompt = f"Translate the provided document(s) to {targetLanguage}." if sourceLanguage: aiPrompt += f" The source language is {sourceLanguage}." if preserveFormatting: aiPrompt += " Preserve all formatting, structure, tables, and layout exactly as they appear in the original document." else: aiPrompt += " Focus on accurate translation of content." aiPrompt += " Maintain the same document structure, headings, and organization." processParams = { "aiPrompt": aiPrompt, "documentList": documentList } if resultType: processParams["resultType"] = resultType return await self.process(processParams)