Jido.AI.Actions.ToolCalling.CallWithTools (Jido AI v2.1.0)

View Source

A Jido.Action for LLM calls with tool/function calling support.

This action sends a prompt to an LLM with available tools, handles tool calls in the response, and optionally executes tools automatically for multi-turn conversations.

Parameters

  • model (optional) - Model alias (e.g., :capable) or direct spec
  • prompt (required) - The user prompt to send to the LLM
  • system_prompt (optional) - System prompt to guide behavior
  • tools (optional) - List of tool names to include (default: all registered)
  • max_tokens (optional) - Maximum tokens to generate (default: 4096)
  • temperature (optional) - Sampling temperature (default: 0.7)
  • timeout (optional) - Request timeout in milliseconds
  • auto_execute (optional) - Auto-execute tool calls (default: false)
  • max_turns (optional) - Max conversation turns with tools (default: 10)

Examples

# Basic tool call
{:ok, result} = Jido.Exec.run(Jido.AI.Actions.ToolCalling.CallWithTools, %{
  prompt: "What's 5 + 3?",
  tools: ["calculator"]
})

# With auto-execution
{:ok, result} = Jido.Exec.run(Jido.AI.Actions.ToolCalling.CallWithTools, %{
  prompt: "Calculate 15 * 7",
  auto_execute: true
})

Summary

Functions

Returns the Action metadata. Alias for to_json/0.

Returns the category of the Action.

Returns the description of the Action.

Returns the name of the Action.

Lifecycle hook called after Action execution.

Lifecycle hook called after output validation.

Lifecycle hook called after parameter validation.

Lifecycle hook called before output validation.

Lifecycle hook called before parameter validation.

Lifecycle hook called when an error occurs.

Returns the output schema of the Action.

Executes the call with tools action.

Returns the input schema of the Action.

Returns the tags associated with the Action.

Returns the Action metadata as a JSON-serializable map.

Converts the Action to an LLM-compatible tool format.

Validates the output result for the Action.

Validates the input parameters for the Action.

Returns the version of the Action.

Functions

__action_metadata__()

Returns the Action metadata. Alias for to_json/0.

category()

Returns the category of the Action.

description()

Returns the description of the Action.

name()

Returns the name of the Action.

on_after_run(result)

@spec on_after_run({:ok, map()} | {:error, any()}) :: {:ok, map()} | {:error, any()}

Lifecycle hook called after Action execution.

on_after_validate_output(output)

@spec on_after_validate_output(map()) :: {:ok, map()} | {:error, any()}

Lifecycle hook called after output validation.

on_after_validate_params(params)

@spec on_after_validate_params(map()) :: {:ok, map()} | {:error, any()}

Lifecycle hook called after parameter validation.

on_before_validate_output(output)

@spec on_before_validate_output(map()) :: {:ok, map()} | {:error, any()}

Lifecycle hook called before output validation.

on_before_validate_params(params)

@spec on_before_validate_params(map()) :: {:ok, map()} | {:error, any()}

Lifecycle hook called before parameter validation.

on_error(failed_params, error, context, opts)

@spec on_error(map(), any(), map(), keyword()) :: {:ok, map()} | {:error, any()}

Lifecycle hook called when an error occurs.

output_schema()

Returns the output schema of the Action.

run(params, context)

@spec run(map(), map()) :: {:ok, map()} | {:ok, map(), any()} | {:error, any()}

Executes the call with tools action.

schema()

Returns the input schema of the Action.

tags()

Returns the tags associated with the Action.

to_json()

Returns the Action metadata as a JSON-serializable map.

to_tool()

Converts the Action to an LLM-compatible tool format.

validate_output(output)

@spec validate_output(map()) :: {:ok, map()} | {:error, String.t()}

Validates the output result for the Action.

Examples

iex> defmodule ExampleAction do
...>   use Jido.Action,
...>     name: "example_action",
...>     output_schema: [
...>       result: [type: :string, required: true]
...>     ]
...> end
...> ExampleAction.validate_output(%{result: "test", extra: "ignored"})
{:ok, %{result: "test", extra: "ignored"}}

iex> ExampleAction.validate_output(%{extra: "ignored"})
{:error, "Invalid output for Action: Required key :result not found"}

validate_params(params)

@spec validate_params(map()) :: {:ok, map()} | {:error, String.t()}

Validates the input parameters for the Action.

Examples

iex> defmodule ExampleAction do
...>   use Jido.Action,
...>     name: "example_action",
...>     schema: [
...>       input: [type: :string, required: true]
...>     ]
...> end
...> ExampleAction.validate_params(%{input: "test"})
{:ok, %{input: "test"}}

iex> ExampleAction.validate_params(%{})
{:error, "Invalid parameters for Action: Required key :input not found"}

vsn()

Returns the version of the Action.