tool_message
langroid/agent/tool_message.py
Structured messages to an agent, typically from an LLM, to be handled by an agent. The messages could represent, for example: - information or data given to the agent - request for information or data from the agent - request to run a method of the agent
ToolMessage
¶
Bases: ABC
, BaseModel
Abstract Class for a class that defines the structure of a "Tool" message from an LLM. Depending on context, "tools" are also referred to as "plugins", or "function calls" (in the context of OpenAI LLMs). Essentially, they are a way for the LLM to express its intent to run a special function or method. Currently these "tools" are handled by methods of the agent.
Attributes:
Name | Type | Description |
---|---|---|
request |
str
|
name of agent method to map to. |
purpose |
str
|
purpose of agent method, expressed in general terms. (This is used when auto-generating the tool instruction to the LLM) |
examples()
classmethod
¶
Examples to use in few-shot demos with formatting instructions. Each example can be either: - just a ToolMessage instance, e.g. MyTool(param1=1, param2="hello"), or - a tuple (description, ToolMessage instance), where the description is a natural language "thought" that leads to the tool usage, e.g. ("I want to find the square of 5", SquareTool(num=5)) In some scenarios, including such a description can significantly enhance reliability of tool use. Returns:
Source code in langroid/agent/tool_message.py
usage_examples(random=False)
classmethod
¶
Instruction to the LLM showing examples of how to use the tool-message.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
random |
bool
|
whether to pick a random example from the list of examples.
Set to |
False
|
Returns: str: examples of how to use the tool/function-call
Source code in langroid/agent/tool_message.py
get_value_of_type(target_type)
¶
Try to find a value of a desired type in the fields of the ToolMessage.
Source code in langroid/agent/tool_message.py
default_value(f)
classmethod
¶
Returns the default value of the given field, for the message-class Args: f (str): field name
Returns:
Name | Type | Description |
---|---|---|
Any |
Any
|
default value of the field, or None if not set or if the field does not exist. |
Source code in langroid/agent/tool_message.py
format_instructions(tool=False)
classmethod
¶
Default Instructions to the LLM showing how to use the tool/function-call. Works for GPT4 but override this for weaker LLMs if needed.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
tool |
bool
|
instructions for Langroid-native tool use? (e.g. for non-OpenAI LLM) (or else it would be for OpenAI Function calls). Ignored in the default implementation, but can be used in subclasses. |
False
|
Returns: str: instructions on how to use the message
Source code in langroid/agent/tool_message.py
group_format_instructions()
staticmethod
¶
Template for instructions for a group of tools. Works with GPT4 but override this for weaker LLMs if needed.
Source code in langroid/agent/tool_message.py
llm_function_schema(request=False, defaults=True)
classmethod
¶
Clean up the schema of the Pydantic class (which can recursively contain other Pydantic classes), to create a version compatible with OpenAI Function-call API.
Adapted from this excellent library: https://github.com/jxnl/instructor/blob/main/instructor/function_calls.py
Parameters:
Name | Type | Description | Default |
---|---|---|---|
request |
bool
|
whether to include the "request" field in the schema. (we set this to True when using Langroid-native TOOLs as opposed to OpenAI Function calls) |
False
|
defaults |
bool
|
whether to include fields with default values in the schema, in the "properties" section. |
True
|
Returns:
Name | Type | Description |
---|---|---|
LLMFunctionSpec |
LLMFunctionSpec
|
the schema as an LLMFunctionSpec |
Source code in langroid/agent/tool_message.py
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 |
|
simple_schema()
classmethod
¶
Return a simplified schema for the message, with only the request and required fields. Returns: Dict[str, Any]: simplified schema
Source code in langroid/agent/tool_message.py
remove_if_exists(k, d)
¶
format_schema_for_strict(schema)
¶
Recursively set additionalProperties to False and replace oneOf and allOf with anyOf, required for OpenAI structured outputs. Additionally, remove all defaults and set all fields to required. This may not be equivalent to the original schema.