File size: 3,560 Bytes
ff6980a
6aae614
ff6980a
9b5b26a
ff6980a
435589f
ff6980a
 
 
435589f
9b5b26a
435589f
ff6980a
 
 
 
 
 
 
13d500a
ff6980a
8c01ffb
435589f
ff6980a
8c01ffb
ff6980a
435589f
 
ff6980a
 
 
 
 
 
 
 
435589f
ff6980a
 
435589f
ff6980a
8c01ffb
435589f
 
 
ff6980a
435589f
 
 
d1f023e
435589f
 
 
 
 
ff6980a
435589f
ff6980a
8fe992b
ff6980a
435589f
ff6980a
435589f
ff6980a
435589f
ff6980a
435589f
ff6980a
435589f
ff6980a
 
 
435589f
ff6980a
 
 
435589f
 
 
 
 
ff6980a
 
 
 
 
 
 
 
 
435589f
ff6980a
9b5b26a
ff6980a
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from tools.web_search import DuckDuckGoSearchTool
from tools.final_answer import FinalAnswerTool
from tools.healthcare_llm_visualizer import HealthcareLLMVisualizerTool
from Gradio_UI import GradioUI
from agent import ResearchAgent
from model_init import ModelInitializer  # Новий імпорт
import os
from dotenv import load_dotenv
import logging
from pathlib import Path

# Налаштування логування
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('research_agent.log'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

# Завантаження змінних середовища
load_dotenv()

def initialize_tools():
    """Ініціалізація всіх доступних інструментів"""
    logger.info("Ініціалізація інструментів...")
    try:
        tools = [
            DuckDuckGoSearchTool(
                max_results=int(os.getenv('MAX_SEARCH_RESULTS', 10))
            ),
            FinalAnswerTool(),
            HealthcareLLMVisualizerTool()
        ]
        logger.info("Інструменти успішно ініціалізовано")
        return tools
    except Exception as e:
        logger.error(f"Помилка ініціалізації інструментів: {e}")
        raise

def initialize_model(model_key=None):
    """Ініціалізація моделі"""
    logger.info("Ініціалізація мовної моделі...")
    try:
        config_path = Path("models_config.json")
        model_initializer = ModelInitializer(config_path)
        model = model_initializer.initialize_model(model_key)
        
        if model_key:
            logger.info(f"Модель ініціалізовано: {model_key}")
        else:
            logger.info("Ініціалізовано модель за замовчуванням")
        return model, model_initializer
    except Exception as e:
        logger.error(f"Помилка ініціалізації моделі: {e}")
        raise

def main():
    """Головна точка входу в програму"""
    try:
        logger.info("Запуск Research Agent...")
        
        # Ініціалізація компонентів
        tools = initialize_tools()
        model, model_initializer = initialize_model()
        
        # Ініціалізація дослідницького агента
        agent = ResearchAgent(
            model=model,
            tools=tools,
            max_steps=int(os.getenv('MAX_STEPS', 10)),
            verbosity_level=int(os.getenv('VERBOSITY_LEVEL', 1))
        )
        
        # Додавання model_initializer до агента для можливості зміни моделі
        agent.model_initializer = model_initializer
        
        # Запуск інтерфейсу
        logger.info("Запуск Gradio інтерфейсу...")
        ui = GradioUI(agent)
        ui.launch(
            debug=os.getenv('DEBUG_MODE', 'False').lower() == 'true',
            share=os.getenv('SHARE_GRADIO', 'True').lower() == 'true',
            server_name=os.getenv('GRADIO_SERVER_NAME', '0.0.0.0'),
            server_port=int(os.getenv('GRADIO_SERVER_PORT', 7860))
        )
        
    except Exception as e:
        logger.error(f"Помилка запуску програми: {e}")
        raise

if __name__ == "__main__":
    main()