from smolagents import Tool from typing import Optional class TranslateTool(Tool): name = "google_translate" description = """ Translates text from one language to another using the Google Translate API. Supports a wide range of languages using standard language codes (e.g., 'en' for English, 'fr' for French). If source_language is not specified, it will be auto-detected. If target_language is not specified, it defaults to English ('en'). """ inputs = { "text": { "type": "string", "description": "The text to translate." }, "source_language": { "type": "string", "description": "The source language code (e.g., 'en' for English, 'fr' for French).", }, "target_language": { "type": "string", "description": "The target language code (e.g., 'es' for Spanish, 'de' for German).", } } output_type = "string" async def translate_text(text: str, src: str, dest: str): """ Translates text from one language to another using the Google Translate API. Args: text (str): The text to translate. src (str): The source language code. dest (str): The target language code. Returns: str: The translated text. """ from googletrans import Translator async with Translator() as translator: res = await translator.translate(text, src, dest) return res def forward(self, text: str, source_language: str, target_language: str): import asyncio try: translator = Translator() translation = asyncio.run(translator.translate(text, src=source_language, dest=target_language)) return translation.text except Exception as e: return f"Error: Unable to translate due to {e}"