base
AgentConfig
¶
Bases: BaseSettings
General config settings for an LLM agent. This is nested, combining configs of various components.
Agent(config=AgentConfig())
¶
Bases: ABC
An Agent is an abstraction that encapsulates mainly two components:
- a language model (LLM)
- a vector store (vecdb)
plus associated components such as a parser, and variables that hold information about any tool/function-calling messages that have been defined.
Source code in langroid/agent/base.py
indent: str
property
writable
¶
Indentation to print before any responses from the agent's entities.
entity_responders()
¶
Sequence of (entity, response_method) pairs. This sequence is used
in a Task
to respond to the current pending message.
See Task.step()
for details.
Returns:
Sequence of (entity, response_method) pairs.
Source code in langroid/agent/base.py
entity_responders_async()
¶
Async version of entity_responders
. See there for details.
Source code in langroid/agent/base.py
enable_message_handling(message_class=None)
¶
Enable an agent to RESPOND (i.e. handle) a "tool" message of a specific type
from LLM. Also "registers" (i.e. adds) the message_class
to the
self.llm_tools_map
dict.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
message_class |
Optional[Type[ToolMessage]]
|
The message class to enable; Optional; if None, all known message classes are enabled for handling. |
None
|
Source code in langroid/agent/base.py
disable_message_handling(message_class=None)
¶
Disable a message class from being handled by this Agent.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
message_class |
Optional[Type[ToolMessage]]
|
The message class to disable. If None, all message classes are disabled. |
None
|
Source code in langroid/agent/base.py
sample_multi_round_dialog()
¶
Generate a sample multi-round dialog based on enabled message classes. Returns: str: The sample dialog string.
Source code in langroid/agent/base.py
agent_response_template()
¶
agent_response(msg=None)
¶
Response from the "agent itself", typically (but not only)
used to handle LLM's "tool message" or function_call
(e.g. OpenAI function_call
).
Args:
msg (str|ChatDocument): the input to respond to: if msg is a string,
and it contains a valid JSON-structured "tool message", or
if msg is a ChatDocument, and it contains a function_call
.
Returns:
Optional[ChatDocument]: the response, packaged as a ChatDocument
Source code in langroid/agent/base.py
user_response_template()
¶
user_response(msg=None)
¶
Get user response to current message. Could allow (human) user to intervene with an actual answer, or quit using "q" or "x"
Parameters:
Name | Type | Description | Default |
---|---|---|---|
msg |
str | ChatDocument
|
the string to respond to. |
None
|
Returns:
Type | Description |
---|---|
Optional[ChatDocument]
|
(str) User response, packaged as a ChatDocument |
Source code in langroid/agent/base.py
llm_can_respond(message=None)
¶
Whether the LLM can respond to a message. Args: message (str|ChatDocument): message or ChatDocument object to respond to.
Returns:
Source code in langroid/agent/base.py
llm_response_template()
¶
llm_response_async(msg=None)
async
¶
Asynch version of llm_response
. See there for details.
Source code in langroid/agent/base.py
llm_response(msg=None)
¶
LLM response to a prompt. Args: msg (str|ChatDocument): prompt string, or ChatDocument object
Returns:
Type | Description |
---|---|
Optional[ChatDocument]
|
Response from LLM, packaged as a ChatDocument |
Source code in langroid/agent/base.py
has_tool_message_attempt(msg)
¶
Check whether msg contains a Tool/fn-call attempt (by the LLM)
Source code in langroid/agent/base.py
get_json_tool_messages(input_str)
¶
Returns ToolMessage objects (tools) corresponding to JSON substrings, if any.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
input_str |
str
|
input string, typically a message sent by an LLM |
required |
Returns:
Type | Description |
---|---|
List[ToolMessage]
|
List[ToolMessage]: list of ToolMessage objects |
Source code in langroid/agent/base.py
tool_validation_error(ve)
¶
Handle a validation error raised when parsing a tool message, when there is a legit tool name used, but it has missing/bad fields. Args: tool (ToolMessage): The tool message that failed validation ve (ValidationError): The exception raised
Returns:
Name | Type | Description |
---|---|---|
str |
str
|
The error message to send back to the LLM |
Source code in langroid/agent/base.py
handle_message(msg)
¶
Handle a "tool" message either a string containing one or more
valid "tool" JSON substrings, or a
ChatDocument containing a function_call
attribute.
Handle with the corresponding handler method, and return
the results as a combined string.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
msg |
str | ChatDocument
|
The string or ChatDocument to handle |
required |
Returns:
Type | Description |
---|---|
None | str | ChatDocument
|
Optional[Str]: The result of the handler method in string form so it can |
None | str | ChatDocument
|
be sent back to the LLM, or None if |
None | str | ChatDocument
|
handled by a method. |
Source code in langroid/agent/base.py
handle_message_fallback(msg)
¶
Fallback method to handle possible "tool" msg if no other method applies or if an error is thrown. This method can be overridden by subclasses.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
msg |
str | ChatDocument
|
The input msg to handle |
required |
Returns: str: The result of the handler method in string form so it can be sent back to the LLM.
Source code in langroid/agent/base.py
handle_tool_message(tool)
¶
Respond to a tool request from the LLM, in the form of an ToolMessage object. Args: tool: ToolMessage object representing the tool request.
Returns:
Source code in langroid/agent/base.py
update_token_usage(response, prompt, stream, chat=True, print_response_stats=True)
¶
Updates response.usage
obj (token usage and cost fields).the usage memebr
It updates the cost after checking the cache and updates the
tokens (prompts and completion) if the response stream is True, because OpenAI
doesn't returns these fields.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
response |
LLMResponse
|
LLMResponse object |
required |
prompt |
str | List[LLMMessage]
|
prompt or list of LLMMessage objects |
required |
stream |
bool
|
whether to update the usage in the response object if the response is not cached. |
required |
chat |
bool
|
whether this is a chat model or a completion model |
True
|
print_response_stats |
bool
|
whether to print the response stats |
True
|
Source code in langroid/agent/base.py
ask_agent(agent, request, no_answer=NO_ANSWER, user_confirm=True)
¶
Send a request to another agent, possibly after confirming with the user.
This is not currently used, since we rely on the task loop and
RecipientTool
to address requests to other agents. It is generally best to
avoid using this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
agent |
Agent
|
agent to ask |
required |
request |
str
|
request to send |
required |
no_answer |
str
|
expected response when agent does not know the answer |
NO_ANSWER
|
user_confirm |
bool
|
whether to gate the request with a human confirmation |
True
|
Returns:
Name | Type | Description |
---|---|---|
str |
Optional[str]
|
response from agent |