Normalizes tool call and tool result data for generated chat UIs.
mix ash_ai.gen.chat templates delegate to extract/1 so the generated modules
stay small and the parsing behavior is centralized in AshAi.
Advanced apps can override the generated delegation seam:
@chat_ui_tools MyApp.ChatUITools
Summary
Types
Functions
@spec extract(map() | struct()) :: {:ok, extracted_tool_data()} | {:error, Ash.Error.t()}