autonomous-coding-system / agents /reasoning_agent.py
God Agent OS CI
🚀 Deploy God Agent OS v11 - 2026-05-17 07:49
02117ee
"""
ReasoningAgent v7 — Complex reasoning, analysis, and multi-step problem solving
GOD AGENT OS — Using DeepSeek R1, Qwen QwQ, o1-mini style reasoning
"""
import asyncio
import json
from typing import Dict, Any, List, Optional
import structlog
from .base_agent import BaseAgent
log = structlog.get_logger()
REASONING_SYSTEM = """You are an elite autonomous reasoning and analysis agent.
You excel at:
- Multi-step reasoning with chain-of-thought
- Complex problem decomposition and analysis
- Mathematical and logical reasoning
- Strategic planning and decision making
- Root cause analysis
Always think step by step, show your reasoning, and provide confident conclusions.
"""
class ReasoningAgent(BaseAgent):
"""
Specialized agent for complex reasoning, analysis, and problem-solving tasks.
Capabilities:
- Multi-step reasoning with chain-of-thought
- Complex problem decomposition
- Mathematical reasoning
- Logical analysis
- Strategic planning
"""
def __init__(self, ws_manager=None, ai_router=None):
super().__init__("ReasoningAgent", ws_manager, ai_router)
self.reasoning_depth = 3
self.max_reasoning_tokens = 16000
async def run(self, task: str, context: Dict = {}, **kwargs) -> str:
"""Execute reasoning task."""
session_id = kwargs.get("session_id", "")
task_id = kwargs.get("task_id", "")
await self.emit(task_id, "agent_start", {
"agent": "ReasoningAgent",
"task": task[:80],
}, session_id)
try:
# Step 1: Analyze the problem
analysis = await self._analyze_problem(task, context, task_id, session_id)
# Step 2: Decompose if complex
if len(task.split()) > 30:
sub_problems = await self._decompose_problem(task, analysis, task_id, session_id)
solutions = []
for sub in sub_problems[:3]:
sol = await self._solve_sub_problem(sub, context, task_id, session_id)
solutions.append(sol)
result = await self._synthesize_answer(task, analysis, sub_problems, solutions, task_id, session_id)
else:
result = analysis
await self.emit(task_id, "reasoning_complete", {
"agent": "ReasoningAgent",
"reasoning_depth": self.reasoning_depth,
}, session_id)
return result
except Exception as e:
log.error("ReasoningAgent failed", error=str(e))
return "Reasoning agent encountered an error: " + str(e)
async def _analyze_problem(self, problem: str, context: Dict, task_id: str, session_id: str) -> str:
"""Analyze the problem using reasoning model."""
messages = [
{"role": "system", "content": REASONING_SYSTEM},
{"role": "user", "content": (
"Analyze this problem step by step:\n\n"
+ problem + "\n\n"
"Provide:\n"
"1. Problem type and complexity\n"
"2. Key constraints and requirements\n"
"3. Step-by-step solution\n"
"4. Final answer/recommendation"
)},
]
return await self.llm(
messages,
task_id=task_id,
session_id=session_id,
temperature=0.2,
max_tokens=self.max_reasoning_tokens,
)
async def _decompose_problem(self, problem: str, analysis: str, task_id: str, session_id: str) -> List[str]:
"""Break down complex problem into sub-problems."""
messages = [
{"role": "system", "content": REASONING_SYSTEM},
{"role": "user", "content": (
"Break this complex problem into 3 specific sub-problems:\n\n"
+ problem + "\n\n"
"Initial analysis: " + analysis[:500] + "\n\n"
"List each sub-problem on a new line starting with '1.', '2.', '3.'"
)},
]
raw = await self.llm(messages, task_id=task_id, session_id=session_id, temperature=0.3, max_tokens=2000)
# Parse numbered sub-problems
lines = raw.split("\n")
sub_problems = []
for line in lines:
line = line.strip()
if line and any(line.startswith(str(i) + ".") for i in range(1, 10)):
sub_problems.append(line)
return sub_problems if sub_problems else [problem]
async def _solve_sub_problem(self, sub_problem: str, context: Dict, task_id: str, session_id: str) -> str:
"""Solve individual sub-problem."""
messages = [
{"role": "system", "content": REASONING_SYSTEM},
{"role": "user", "content": "Solve this specific problem:\n\n" + sub_problem},
]
return await self.llm(messages, task_id=task_id, session_id=session_id, temperature=0.2, max_tokens=4096)
async def _synthesize_answer(
self,
original: str,
analysis: str,
sub_problems: List[str],
solutions: List[str],
task_id: str,
session_id: str,
) -> str:
"""Synthesize final answer from all reasoning steps."""
solutions_text = "\n".join(
"Sub-problem " + str(i + 1) + ": " + sol[:300]
for i, sol in enumerate(solutions)
)
messages = [
{"role": "system", "content": REASONING_SYSTEM},
{"role": "user", "content": (
"Original problem: " + original + "\n\n"
"Analysis: " + analysis[:800] + "\n\n"
"Solutions to sub-problems:\n" + solutions_text + "\n\n"
"Provide a comprehensive final answer that integrates all insights."
)},
]
return await self.llm(messages, task_id=task_id, session_id=session_id, temperature=0.3, max_tokens=8192)
def get_status(self) -> Dict[str, Any]:
"""Get agent status."""
return {
"name": self.name,
"status": "ready",
"capabilities": [
"Multi-step reasoning",
"Problem decomposition",
"Mathematical reasoning",
"Logical analysis",
"Strategic planning",
],
"reasoning_depth": self.reasoning_depth,
}
__all__ = ["ReasoningAgent"]