import sys
import os
script_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(script_dir, "../../.."))

if project_root not in sys.path:
    sys.path.insert(0, project_root)

from HeGFlow.graph.tool_node import Tool_node
import abc
from typing import Dict, Any, Union, Optional
from abc import ABC, abstractmethod
from openai import AsyncOpenAI 
import contextlib 
import sys
from openai import OpenAI
import re


class Translator(Tool_node):
    def __init__(self):
        super().__init__(
            name="Translator",
            description="a translator for any to English'。"
        )

    async def _execute_tool(self, task:str) -> str:
        
        print(f"[TranslationTool")
        
        try:
            client = OpenAI(api_key="", base_url="")
            response = client.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {"role": "system", "content": "You are a dedicated translator. Your task is to translate the following questions into English. Note: only input the translated English version of the questions, do not output any other content."},
                {"role": "user", "content": task},
            ],
            stream=False
                )
            
            translated = response.choices[0].message.content

            return f"Original version task: {task},\nTranslated version tasks: {translated}, \nPlease answer the questions according to the translated version"
            
        except Exception as e:
            print("Error in translation tool")
            return f"An error occurred in the translation tool"


    
async def main_translator_example():

    coder_tool = Translator()

    task1_desc = "Утки Дженет несут по 16 яиц в день. Она ест три на завтрак каждое утро и печет кексы для своих друзей каждый день, используя четыре. Остаток она каждый день продает на фермерском рынке по 2 $ за свежее утиное яйцо. Сколько в долларах она зарабатывает на фермерском рынке каждый день?Для халата требуется 2 мотка синей пряжи и вполовину меньше белой пряжи. Сколько всего мотков требуется?"
    
    print(f"\n--- Task 1: {task1_desc} ---")
    result1 = await coder_tool._execute_tool(task=task1_desc)
    print("\n" + result1)

    

if __name__ == "__main__":
    import asyncio
    asyncio.run(main_translator_example())