Documentation for AshAi.

tools

Nested DSLs

tools.tool

tool name, resource, action

Expose an Ash action as a tool that can be called by LLMs.

Tools allow LLMs to interact with your application by calling specific actions on resources. Only public attributes can be used for filtering, sorting, and aggregation, but the load option allows including private attributes in the response data.

Examples

tool :list_artists, Artist, :read
tool :create_artist, Artist, :create, description: "Create a new artist"
tool :update_artist, Artist, :update, identity: :id, load: [:albums]
tool :get_board, Board, :read, _meta: %{"openai/outputTemplate" => "ui://widget/kanban-board.html", "openai/toolInvocation/invoking" => "Preparing the board…", "openai/toolInvocation/invoked" => "Board ready."}

Arguments

NameTypeDefaultDocs
nameatom
resourcemodule
actionatom

Options

NameTypeDefaultDocs
action_parameterslist(atom)A list of action specific parameters to allow for the underlying action. Only relevant for reads, and defaults to allowing [:sort, :offset, :limit, :result_type, :filter]
loadany[]A list of relationships and calculations to load on the returned records. Note that loaded fields can include private attributes, which will then be included in the tool's response. However, private attributes cannot be used for filtering, sorting, or aggregation.
asyncbooleantrue
descriptionString.tA description for the tool. Defaults to the action's description.
identityatomThe identity to use for update/destroy actions. Defaults to the primary key. Set to false to disable entirely.
_metaany%{}Optional metadata map for tool integrations. Supports provider-specific extensions like OpenAI metadata. Keys and values should be strings to comply with JSON-RPC serialization.

Introspection

Target: AshAi.Tool

vectorize

Nested DSLs

Options

NameTypeDefaultDocs
embedding_modelmodule
attributeskeyword[]A keyword list of attributes to vectorize, and the name of the attribute to store the vector in
strategy:after_action | :manual | :ash_oban | :ash_oban_manual:after_actionHow to compute the vector. Currently supported strategies are :after_action, :manual, and :ash_oban.
define_update_action_for_manual_strategy?booleantrueIf true, an ash_ai_update_embeddings update action will be defined, which will automatically update the embeddings when run.
ash_oban_trigger_nameatom:ash_ai_update_embeddingsThe name of the AshOban-trigger that will be run in order to update the record's embeddings. Defaults to :ash_ai_update_embeddings.

vectorize.full_text

Options

NameTypeDefaultDocs
text(any -> any)A function or expr that takes a list of records and computes a full text string that will be vectorized. If given an expr, use atomic_ref to refer to new values, as this is set as an atomic update.
nameatom:full_text_vectorThe name of the attribute to store the text vector in
used_attributeslist(atom)If set, a vector is only regenerated when these attributes are changed

Introspection

Target: AshAi.FullText

mcp_resources

Nested DSLs

mcp_resources.mcp_resource

mcp_resource name, uri, resource, action

An MCP resource to expose via the Model Context Protocol (MCP). MCP Resources are different to Ash Resources. Here they are used to respond to LLM models with static or dynamic assets like files, images, or JSON.

The resource description defaults to the action's description. You can override this by providing a description option which takes precedence.

Examples

mcp_resource :artist_card, "file://info/artist_info.txt", Artist, :artist_info
mcp_resource :artist_card, "file://ui/artist_card.html", Artist, :artist_card, mime_type: "text/html"
mcp_resource :artist_data, "file://data/artist.json", Artist, :to_json, description: "Artist metadata as JSON", mime_type: "application/json"

Arguments

NameTypeDefaultDocs
nameatom
uriString.tThe URI where the resource can be accessed.
resourcemodule
actionatom

Options

NameTypeDefaultDocs
titleString.tA short, human-readable title for the resource.
descriptionString.tA description of the resource. This is important for LLM to determine what the resource is and when to call it. Defaults to the Action's description if not provided.
mime_typeString.t"text/plain"The MIME type of the resource, e.g. 'application/json', 'image/png', etc.

Introspection

Target: AshAi.McpResource