feat : integrate reasoning view
This commit is contained in:
@@ -138,6 +138,7 @@ async def get_latest_answer():
|
|||||||
query_resp = {
|
query_resp = {
|
||||||
"done": "false",
|
"done": "false",
|
||||||
"answer": interaction.current_agent.last_answer,
|
"answer": interaction.current_agent.last_answer,
|
||||||
|
"reasoning": interaction.current_agent.last_reasoning,
|
||||||
"agent_name": interaction.current_agent.agent_name if interaction.current_agent else "None",
|
"agent_name": interaction.current_agent.agent_name if interaction.current_agent else "None",
|
||||||
"success": interaction.current_agent.success,
|
"success": interaction.current_agent.success,
|
||||||
"blocks": {f'{i}': block.jsonify() for i, block in enumerate(interaction.get_last_blocks_result())} if interaction.current_agent else {},
|
"blocks": {f'{i}': block.jsonify() for i, block in enumerate(interaction.get_last_blocks_result())} if interaction.current_agent else {},
|
||||||
@@ -145,6 +146,7 @@ async def get_latest_answer():
|
|||||||
"uid": uid
|
"uid": uid
|
||||||
}
|
}
|
||||||
interaction.current_agent.last_answer = ""
|
interaction.current_agent.last_answer = ""
|
||||||
|
interaction.current_agent.last_reasoning = ""
|
||||||
query_resp_history.append(query_resp)
|
query_resp_history.append(query_resp)
|
||||||
return JSONResponse(status_code=200, content=query_resp)
|
return JSONResponse(status_code=200, content=query_resp)
|
||||||
if query_resp_history:
|
if query_resp_history:
|
||||||
@@ -158,6 +160,7 @@ async def think_wrapper(interaction, query):
|
|||||||
success = await interaction.think()
|
success = await interaction.think()
|
||||||
if not success:
|
if not success:
|
||||||
interaction.last_answer = "Error: No answer from agent"
|
interaction.last_answer = "Error: No answer from agent"
|
||||||
|
interaction.last_reasoning = "Error: No reasoning from agent"
|
||||||
interaction.last_success = False
|
interaction.last_success = False
|
||||||
else:
|
else:
|
||||||
interaction.last_success = True
|
interaction.last_success = True
|
||||||
@@ -166,7 +169,8 @@ async def think_wrapper(interaction, query):
|
|||||||
return success
|
return success
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error in think_wrapper: {str(e)}")
|
logger.error(f"Error in think_wrapper: {str(e)}")
|
||||||
interaction.last_answer = f"Error: {str(e)}"
|
interaction.last_answer = f""
|
||||||
|
interaction.last_reasoning = f"Error: {str(e)}"
|
||||||
interaction.last_success = False
|
interaction.last_success = False
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
@@ -177,6 +181,7 @@ async def process_query(request: QueryRequest):
|
|||||||
query_resp = QueryResponse(
|
query_resp = QueryResponse(
|
||||||
done="false",
|
done="false",
|
||||||
answer="",
|
answer="",
|
||||||
|
reasoning="",
|
||||||
agent_name="Unknown",
|
agent_name="Unknown",
|
||||||
success="false",
|
success="false",
|
||||||
blocks={},
|
blocks={},
|
||||||
@@ -194,6 +199,7 @@ async def process_query(request: QueryRequest):
|
|||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
query_resp.answer = interaction.last_answer
|
query_resp.answer = interaction.last_answer
|
||||||
|
query_resp.reasoning = interaction.last_reasoning
|
||||||
return JSONResponse(status_code=400, content=query_resp.jsonify())
|
return JSONResponse(status_code=400, content=query_resp.jsonify())
|
||||||
|
|
||||||
if interaction.current_agent:
|
if interaction.current_agent:
|
||||||
@@ -208,6 +214,7 @@ async def process_query(request: QueryRequest):
|
|||||||
logger.info(f"Blocks: {blocks_json}")
|
logger.info(f"Blocks: {blocks_json}")
|
||||||
query_resp.done = "true"
|
query_resp.done = "true"
|
||||||
query_resp.answer = interaction.last_answer
|
query_resp.answer = interaction.last_answer
|
||||||
|
query_resp.reasoning = interaction.last_reasoning
|
||||||
query_resp.agent_name = interaction.current_agent.agent_name
|
query_resp.agent_name = interaction.current_agent.agent_name
|
||||||
query_resp.success = str(interaction.last_success)
|
query_resp.success = str(interaction.last_success)
|
||||||
query_resp.blocks = blocks_json
|
query_resp.blocks = blocks_json
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ function App() {
|
|||||||
{
|
{
|
||||||
type: 'agent',
|
type: 'agent',
|
||||||
content: data.answer,
|
content: data.answer,
|
||||||
|
reasoning: data.reasoning,
|
||||||
agentName: data.agent_name,
|
agentName: data.agent_name,
|
||||||
status: data.status,
|
status: data.status,
|
||||||
uid: data.uid,
|
uid: data.uid,
|
||||||
@@ -231,6 +232,12 @@ function App() {
|
|||||||
>
|
>
|
||||||
Browser View
|
Browser View
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
className={currentView === 'thinking' ? 'active' : ''}
|
||||||
|
onClick={() => setCurrentView('thinking')}
|
||||||
|
>
|
||||||
|
Reasoning view
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div className="content">
|
<div className="content">
|
||||||
{error && <p className="error">{error}</p>}
|
{error && <p className="error">{error}</p>}
|
||||||
@@ -256,6 +263,33 @@ function App() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
) : currentView == 'thinking' ? (
|
||||||
|
<div className="thinking">
|
||||||
|
<div className="messages">
|
||||||
|
{messages.length === 0 ? (
|
||||||
|
<p className="placeholder">No thinking yet.</p>
|
||||||
|
) : (
|
||||||
|
messages.map((msg, index) => (
|
||||||
|
<div
|
||||||
|
key={index}
|
||||||
|
className={`message ${
|
||||||
|
msg.type === 'user'
|
||||||
|
? 'user-message'
|
||||||
|
: msg.type === 'agent'
|
||||||
|
? 'agent-message'
|
||||||
|
: 'error-message'
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{msg.type === 'agent' && (
|
||||||
|
<span className="agent-name">{msg.agentName}</span>
|
||||||
|
)}
|
||||||
|
<ReactMarkdown>{msg.reasoning}</ReactMarkdown>
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
)}
|
||||||
|
<div ref={messagesEndRef} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="screenshot">
|
<div className="screenshot">
|
||||||
<img
|
<img
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ class Agent():
|
|||||||
self.blocks_result = []
|
self.blocks_result = []
|
||||||
self.success = True
|
self.success = True
|
||||||
self.last_answer = ""
|
self.last_answer = ""
|
||||||
|
self.last_reasoning = ""
|
||||||
self.status_message = "Haven't started yet"
|
self.status_message = "Haven't started yet"
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.executor = ThreadPoolExecutor(max_workers=1)
|
self.executor = ThreadPoolExecutor(max_workers=1)
|
||||||
@@ -64,6 +65,10 @@ class Agent():
|
|||||||
def get_last_answer(self) -> str:
|
def get_last_answer(self) -> str:
|
||||||
return self.last_answer
|
return self.last_answer
|
||||||
|
|
||||||
|
@property
|
||||||
|
def get_last_reasoning(self) -> str:
|
||||||
|
return self.last_reasoning
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def get_blocks(self) -> list:
|
def get_blocks(self) -> list:
|
||||||
return self.blocks_result
|
return self.blocks_result
|
||||||
|
|||||||
@@ -221,8 +221,9 @@ class PlannerAgent(Agent):
|
|||||||
agent_prompt = self.make_prompt(task['task'], required_infos)
|
agent_prompt = self.make_prompt(task['task'], required_infos)
|
||||||
pretty_print(f"Agent {task['agent']} started working...", color="status")
|
pretty_print(f"Agent {task['agent']} started working...", color="status")
|
||||||
self.logger.info(f"Agent {task['agent']} started working on {task['task']}.")
|
self.logger.info(f"Agent {task['agent']} started working on {task['task']}.")
|
||||||
answer, _ = await self.agents[task['agent'].lower()].process(agent_prompt, None)
|
answer, reasoning = await self.agents[task['agent'].lower()].process(agent_prompt, None)
|
||||||
self.last_answer = answer
|
self.last_answer = answer
|
||||||
|
self.last_reasoning = reasoning
|
||||||
self.blocks_result = self.agents[task['agent'].lower()].blocks_result
|
self.blocks_result = self.agents[task['agent'].lower()].blocks_result
|
||||||
agent_answer = self.agents[task['agent'].lower()].raw_answer_blocks(answer)
|
agent_answer = self.agents[task['agent'].lower()].raw_answer_blocks(answer)
|
||||||
success = self.agents[task['agent'].lower()].get_success
|
success = self.agents[task['agent'].lower()].get_success
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ class Interaction:
|
|||||||
self.current_agent = None
|
self.current_agent = None
|
||||||
self.last_query = None
|
self.last_query = None
|
||||||
self.last_answer = None
|
self.last_answer = None
|
||||||
|
self.last_reasoning = None
|
||||||
self.agents = agents
|
self.agents = agents
|
||||||
self.tts_enabled = tts_enabled
|
self.tts_enabled = tts_enabled
|
||||||
self.stt_enabled = stt_enabled
|
self.stt_enabled = stt_enabled
|
||||||
@@ -158,7 +159,7 @@ class Interaction:
|
|||||||
tmp = self.last_answer
|
tmp = self.last_answer
|
||||||
self.current_agent = agent
|
self.current_agent = agent
|
||||||
self.is_generating = True
|
self.is_generating = True
|
||||||
self.last_answer, _ = await agent.process(self.last_query, self.speech)
|
self.last_answer, self.last_reasoning = await agent.process(self.last_query, self.speech)
|
||||||
self.is_generating = False
|
self.is_generating = False
|
||||||
if push_last_agent_memory:
|
if push_last_agent_memory:
|
||||||
self.current_agent.memory.push('user', self.last_query)
|
self.current_agent.memory.push('user', self.last_query)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class QueryRequest(BaseModel):
|
|||||||
class QueryResponse(BaseModel):
|
class QueryResponse(BaseModel):
|
||||||
done: str
|
done: str
|
||||||
answer: str
|
answer: str
|
||||||
|
reasoning: str
|
||||||
agent_name: str
|
agent_name: str
|
||||||
success: str
|
success: str
|
||||||
blocks: dict
|
blocks: dict
|
||||||
@@ -32,6 +33,7 @@ class QueryResponse(BaseModel):
|
|||||||
return {
|
return {
|
||||||
"done": self.done,
|
"done": self.done,
|
||||||
"answer": self.answer,
|
"answer": self.answer,
|
||||||
|
"reasoning": self.reasoning,
|
||||||
"agent_name": self.agent_name,
|
"agent_name": self.agent_name,
|
||||||
"success": self.success,
|
"success": self.success,
|
||||||
"blocks": self.blocks,
|
"blocks": self.blocks,
|
||||||
|
|||||||
Reference in New Issue
Block a user