Spaces:
Sleeping
Sleeping
File size: 6,714 Bytes
222db43 |
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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# 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()
|