Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: added on_agent_final_answer-support to Agent callback_manager #5736

Merged
merged 14 commits into from
Oct 9, 2023
Merged
Next Next commit
chore: added on_agent_final_answer-support to Agent callback_manager
  • Loading branch information
davidberenstein1957 committed Sep 7, 2023
commit c8da098bcf3c93781228a1289c5d33b1bad55a6b
10 changes: 8 additions & 2 deletions haystack/agents/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ def __init__(
self.max_steps = max_steps
self.tm = tools_manager or ToolsManager()
self.memory = memory or NoMemory()
self.callback_manager = Events(("on_agent_start", "on_agent_step", "on_agent_finish", "on_new_token"))
self.callback_manager = Events(("on_agent_start", "on_agent_step", "on_agent_finish", "on_agent_final_answer", "on_new_token"))
self.prompt_node = prompt_node
prompt_template = prompt_template or prompt_node.default_prompt_template or "zero-shot-react"
resolved_prompt_template = prompt_node.get_prompt_template(prompt_template)
Expand Down Expand Up @@ -290,8 +290,12 @@ def on_agent_start(**kwargs: Any) -> None:
agent_name = kwargs.pop("name", "react")
print_text(f"\nAgent {agent_name} started with {kwargs}\n")

def on_agent_final_answer(final_answer: Dict[str, Any], **kwargs: Any) -> None:
pass

self.tm.callback_manager.on_tool_finish += on_tool_finish
self.callback_manager.on_agent_start += on_agent_start
self.callback_manager.on_agent_final_answer += on_agent_final_answer

if streaming:
self.callback_manager.on_new_token += lambda token, **kwargs: print_text(token, color=agent_color)
Expand Down Expand Up @@ -359,7 +363,9 @@ def run(
agent_step = self._step(query, agent_step, params)
finally:
self.callback_manager.on_agent_finish(agent_step)
return agent_step.final_answer(query=query)
final_answer = agent_step.final_answer(query=query)
self.callback_manager.on_agent_final_answer(final_answer)
return final_answer

def _step(self, query: str, current_step: AgentStep, params: Optional[dict] = None):
# plan next step using the LLM
Expand Down
Loading