File size: 2,257 Bytes
bb6d5ae a8bc4f1 bb6d5ae | 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 | import concurrent.futures
import time
import json
from typing import Dict, List, Any, Optional
import llm_agent
# Active agents for the MVM2 Parallel reasoning layer.
# For Hugging Face Spaces we default all agents to simulated mode so that
# the demo does not depend on external API keys or outbound network access.
AGENT_PROFILES = [
{"name": "Gemini 2.0 Flash (Primary)", "use_real_api": True},
{"name": "Llama 3 (Agentic Mode)", "use_real_api": True},
{"name": "GPT-4 (Verification Layer)", "use_real_api": True},
{"name": "Qwen-2.5-Math (Symbolic Focus)", "use_real_api": True},
]
def run_agent_orchestrator(problem: str) -> List[Dict[str, Any]]:
"""
Dispatches the problem to heterogeneous LLM agents.
"""
print(f"[Orchestrator] Dispatching to {len(AGENT_PROFILES)} Parallel Models...")
results = []
with concurrent.futures.ThreadPoolExecutor() as executor:
future_to_agent = {
executor.submit(llm_agent.LLMAgent(agent["name"], use_real_api=agent["use_real_api"]).generate_solution, problem): agent
for agent in AGENT_PROFILES
}
for future in concurrent.futures.as_completed(future_to_agent):
agent_info = future_to_agent[future]
try:
raw_res = future.result()
normalized_res = {
"Answer": str(raw_res.get("final_answer", raw_res.get("Answer", "ERROR"))),
"Reasoning Trace": raw_res.get("reasoning_trace", raw_res.get("Reasoning Trace", [])),
"Confidence Explanation": raw_res.get("confidence_explanation", raw_res.get("Confidence Explanation", ""))
}
results.append({
"agent": agent_info["name"],
"response": normalized_res
})
print(f"[OK] {agent_info['name']} completed reasoning.")
except Exception as exc:
print(f"[ERROR] {agent_info['name']} generated an exception: {exc}")
return results
if __name__ == "__main__":
test_out = run_agent_orchestrator("\\int_{0}^{\\pi} \\sin(x^{2}) \\, dx")
print(json.dumps(test_out, indent=2))
|