Spaces:
Running
Running
import logging | |
import json | |
import gradio as gr | |
from dotenv import load_dotenv | |
from datetime import datetime | |
from agents.accountability_agent import AccountabilityAgent | |
from agents.outline_agent import OutlineAgent | |
from agents.research_agent import ResearchAgent | |
from agents.synthesis_agent import SynthesisAgent | |
from agents.thinking_ladder_agent import ThinkingLadderAgent | |
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") | |
load_dotenv() | |
outline_agent = OutlineAgent() | |
research_agent = ResearchAgent() | |
thinking_ladder_agent = ThinkingLadderAgent() | |
synthesis_agent = SynthesisAgent() | |
accountability_agent = AccountabilityAgent() | |
logs = [] | |
def save_logs_to_json(logs): | |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
filename = f'logs_{timestamp}.json' | |
with open(filename, 'w') as f: | |
json.dump(logs, f, indent=4) | |
def main(query: str) -> tuple[str, str, float]: | |
log_entry = {} | |
logging.info(f"Received query: {query}") | |
log_entry['query'] = query | |
main_title, themes, metrics_a = outline_agent.run(query) | |
logging.info(f"OutlineAgent output - Main Title: {main_title}, Themes: {themes}, Metrics: {metrics_a}") | |
log_entry['outline_agent'] = { | |
'main_title': main_title, | |
'themes': themes, | |
'metrics': metrics_a | |
} | |
sources, metrics_b = research_agent.run(themes) | |
logging.info(f"ResearchAgent output - Sources: {sources}, Metrics: {metrics_b}") | |
log_entry['research_agent'] = { | |
'sources': sources, | |
'metrics': metrics_b | |
} | |
classified_sources, metrics_c = thinking_ladder_agent.run(themes, sources) | |
logging.info(f"ThinkingLadderAgent output - Classified Sources: {classified_sources}, Metrics: {metrics_c}") | |
log_entry['thinking_ladder_agent'] = { | |
'classified_sources': classified_sources, | |
'metrics': metrics_c | |
} | |
synthesis, metrics_d = synthesis_agent.run(main_title, themes, classified_sources) | |
logging.info(f"SynthesisAgent output - Synthesis: {synthesis}, Metrics: {metrics_d}") | |
log_entry['synthesis_agent'] = { | |
'synthesis': synthesis, | |
'metrics': metrics_d | |
} | |
accountability, metrics_e = accountability_agent.run(query, synthesis) | |
logging.info(f"AccountabilityAgent output - Accountability: {accountability}, Metrics: {metrics_e}") | |
log_entry['accountability_agent'] = { | |
'accountability': accountability, | |
'metrics': metrics_e | |
} | |
cost = sum(list(map(lambda metrics: metrics["cost"], [metrics_a, metrics_b, metrics_c, metrics_d, metrics_e]))) | |
logging.info(f"Total Cost: {cost}") | |
log_entry['total_cost'] = cost | |
logs.append(log_entry) | |
save_logs_to_json(logs) | |
return synthesis, accountability, cost | |
gr.Interface( | |
fn=main, | |
inputs=gr.Textbox(label="Query:"), | |
outputs=[gr.Markdown(label="Generated Synthesis:"), gr.Markdown(label="Accountability:"), gr.Number(label="Cost ($):")], | |
).launch() | |