MCPcopy
hub / github.com/langroid/langroid / done

Method done

langroid/agent/task.py:1991–2098  ·  view source on GitHub ↗

Check if task is done. This is the default behavior. Derived classes can override this. Args: result (ChatDocument|None): result from a responder r (Responder|None): responder that produced the result Not used here, but could be used b

(
        self, result: ChatDocument | None = None, r: Responder | None = None
    )

Source from the content-addressed store, hash-verified

1989 return dominant_msgs == recent_msgs
1990
1991 def done(
1992 self, result: ChatDocument | None = None, r: Responder | None = None
1993 ) -> Tuple[bool, StatusCode]:
1994 """
1995 Check if task is done. This is the default behavior.
1996 Derived classes can override this.
1997 Args:
1998 result (ChatDocument|None): result from a responder
1999 r (Responder|None): responder that produced the result
2000 Not used here, but could be used by derived classes.
2001 Returns:
2002 bool: True if task is done, False otherwise
2003 StatusCode: status code indicating why task is done
2004 """
2005 if self._is_kill():
2006 return (True, StatusCode.KILL)
2007 result = result or self.pending_message
2008
2009 # Check if task should be done if message contains a tool
2010 if self.config.done_if_tool and result is not None:
2011 if isinstance(result, ChatDocument) and self.agent.try_get_tool_messages(
2012 result, all_tools=True
2013 ):
2014 return (True, StatusCode.DONE)
2015
2016 # Check done sequences
2017 if self._parsed_done_sequences and result is not None:
2018 # Get the message chain from the current result
2019 msg_chain = self._get_message_chain(result)
2020
2021 # Use last responder if r not provided
2022 responder = r if r is not None else self._last_responder
2023
2024 # Check each sequence
2025 for sequence in self._parsed_done_sequences:
2026 if self._matches_sequence_with_current(
2027 msg_chain, sequence, result, responder
2028 ):
2029 seq_name = sequence.name or "unnamed"
2030 logger.info(f"Task {self.name} done: matched sequence '{seq_name}'")
2031 return (True, StatusCode.DONE)
2032
2033 allow_done_string = self.config.recognize_string_signals
2034 # An entity decided task is done, either via DoneTool,
2035 # or by explicitly saying DONE
2036 done_result = result is not None and (
2037 (
2038 DONE in (result.content if isinstance(result, str) else result.content)
2039 and allow_done_string
2040 )
2041 or any(
2042 isinstance(t, (DoneTool, AgentDoneTool, FinalResultTool))
2043 for t in result.tool_messages
2044 )
2045 )
2046
2047 user_quit = (
2048 result is not None

Callers 3

runMethod · 0.95
run_asyncMethod · 0.95
validMethod · 0.95

Calls 7

_is_killMethod · 0.95
_get_message_chainMethod · 0.95
_user_can_respondMethod · 0.95
try_get_tool_messagesMethod · 0.80
infoMethod · 0.80
tot_tokens_costMethod · 0.80

Tested by

no test coverage detected