Spaces:
Sleeping
Sleeping
# app/main.py | |
import os | |
import logging | |
import argparse | |
import yaml | |
from typing import Dict, Any | |
# Import utility classes | |
from utils.token_manager import TokenManager | |
from utils.cache_manager import CacheManager | |
from utils.metrics_calculator import MetricsCalculator | |
# Import model managers | |
from models.text_models import TextModelManager | |
from models.image_models import ImageModelManager | |
from models.summary_models import SummaryModelManager | |
# Import agents | |
from agents.text_analysis_agent import TextAnalysisAgent | |
from agents.image_processing_agent import ImageProcessingAgent | |
from agents.report_generation_agent import ReportGeneratorAgent | |
from agents.metrics_agent import MetricsAgent | |
from agents.coordinator_agent import CoordinatorAgent | |
# Import application components | |
from app.orchestrator import Orchestrator | |
from app.data_manager import DataManager | |
from app.error_handler import ErrorHandler | |
from app.synchronizer import Synchronizer | |
from app.gradio_interface import GradioInterface | |
def load_config(config_path: str) -> Dict[str, Any]: | |
"""Load configuration from YAML file.""" | |
try: | |
with open(config_path, 'r') as f: | |
config = yaml.safe_load(f) | |
return config | |
except Exception as e: | |
logging.error(f"Error loading configuration: {e}") | |
return {} | |
def setup_logging(log_level: str = "INFO"): | |
"""Set up logging configuration.""" | |
numeric_level = getattr(logging, log_level.upper(), None) | |
if not isinstance(numeric_level, int): | |
numeric_level = logging.INFO | |
logging.basicConfig( | |
level=numeric_level, | |
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
handlers=[ | |
logging.StreamHandler(), | |
logging.FileHandler("app.log") | |
] | |
) | |
def build_application(config: Dict[str, Any]): | |
"""Build the application components based on configuration.""" | |
# Create utility instances | |
token_manager = TokenManager(config.get("token_manager", {})) | |
cache_manager = CacheManager(config.get("cache_manager", {})) | |
metrics_calculator = MetricsCalculator(config.get("metrics_calculator", {})) | |
# Create model managers | |
text_model_manager = TextModelManager( | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
image_model_manager = ImageModelManager( | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
summary_model_manager = SummaryModelManager( | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
# Create agents | |
text_analysis_agent = TextAnalysisAgent( | |
text_model_manager=text_model_manager, | |
summary_model_manager=summary_model_manager, | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
image_processing_agent = ImageProcessingAgent( | |
image_model_manager=image_model_manager, | |
text_model_manager=text_model_manager, | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
report_generation_agent = ReportGeneratorAgent( | |
summary_model_manager=summary_model_manager, | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
metrics_agent = MetricsAgent( | |
metrics_calculator=metrics_calculator, | |
token_manager=token_manager, | |
cache_manager=cache_manager | |
) | |
# Create data manager | |
data_manager = DataManager(cache_manager=cache_manager) | |
# Create coordinator agent | |
coordinator_agent = CoordinatorAgent( | |
text_analysis_agent=text_analysis_agent, | |
image_processing_agent=image_processing_agent, | |
report_generation_agent=report_generation_agent, | |
metrics_agent=metrics_agent, | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
# Create orchestrator | |
orchestrator = Orchestrator( | |
coordinator_agent=coordinator_agent, | |
text_analysis_agent=text_analysis_agent, # Add this | |
image_processing_agent=image_processing_agent, # Add this | |
report_generation_agent=report_generation_agent, # Add this | |
metrics_agent=metrics_agent, # Add this | |
text_model_manager=text_model_manager, | |
image_model_manager=image_model_manager, | |
summary_model_manager=summary_model_manager, | |
token_manager=token_manager, | |
cache_manager=cache_manager, | |
metrics_calculator=metrics_calculator | |
) | |
# Create Gradio interface | |
interface = GradioInterface(orchestrator=orchestrator) | |
return { | |
"token_manager": token_manager, | |
"cache_manager": cache_manager, | |
"metrics_calculator": metrics_calculator, | |
"text_model_manager": text_model_manager, | |
"image_model_manager": image_model_manager, | |
"summary_model_manager": summary_model_manager, | |
"text_analysis_agent": text_analysis_agent, | |
"image_processing_agent": image_processing_agent, | |
"report_generation_agent": report_generation_agent, | |
"metrics_agent": metrics_agent, | |
"data_manager": data_manager, | |
"coordinator_agent": coordinator_agent, | |
"orchestrator": orchestrator, | |
"interface": interface | |
} | |
def main(): | |
"""Main entry point for the application.""" | |
# Parse command line arguments | |
parser = argparse.ArgumentParser(description="Deep Dive Analysis with Sustainable AI") | |
parser.add_argument("--config", type=str, default="config/config.yaml", help="Path to configuration file") | |
parser.add_argument("--log-level", type=str, default="INFO", help="Logging level") | |
parser.add_argument("--port", type=int, default=7860, help="Port for Gradio interface") | |
parser.add_argument("--share", action="store_true", help="Create a shareable link") | |
args = parser.parse_args() | |
# Setup logging | |
setup_logging(args.log_level) | |
# Load configuration | |
config = load_config(args.config) | |
# Build application | |
app = build_application(config) | |
# Launch interface | |
try: | |
app["interface"].launch(server_port=args.port, share=args.share) | |
except KeyboardInterrupt: | |
logging.info("Application shutdown requested") | |
finally: | |
# Cleanup | |
app["interface"].cleanup() | |
logging.info("Application shutdown complete") | |
if __name__ == "__main__": | |
main() | |