AI request schema for PhoenixKit AI system.
Tracks every AI API request for usage history and statistics. Used for monitoring costs, performance, and debugging.
Schema Fields
Request Identity
endpoint_id: Foreign key to the AI endpoint used (new system)endpoint_name: Denormalized endpoint name for historical displayprompt_id: Foreign key to the AI prompt used (if request used a prompt template)prompt_name: Denormalized prompt name for historical displayaccount_id: Foreign key to AI account (deprecated, for backward compatibility)user_id: Foreign key to the user who made the request (nullable if user deleted)slot_index: Which slot was used (deprecated, for backward compatibility)
Request Details
model: Model identifier (e.g., "anthropic/claude-3-haiku")request_type: Type of request (e.g., "text_completion", "chat")
Token Usage
input_tokens: Number of tokens in the promptoutput_tokens: Number of tokens in the responsetotal_tokens: Total tokens used (input + output)
Performance & Cost
cost_cents: Estimated cost in nanodollars (when available)latency_ms: Response time in millisecondsstatus: Request status - "success", "error", or "timeout"error_message: Error details if status is not "success"
Metadata
metadata: Additional context (temperature, max_tokens, etc.)
Status Types
success- Request completed successfullyerror- Request failed with an errortimeout- Request timed out
Usage Examples
# Log a successful request
{:ok, request} = PhoenixKit.Modules.AI.create_request(%{
endpoint_id: endpoint.id,
endpoint_name: "Claude Fast",
user_id: 123,
model: "anthropic/claude-3-haiku",
request_type: "chat",
input_tokens: 150,
output_tokens: 320,
total_tokens: 470,
latency_ms: 850,
status: "success",
metadata: %{"temperature" => 0.7}
})
# Log a failed request
{:ok, request} = PhoenixKit.Modules.AI.create_request(%{
endpoint_id: endpoint.id,
endpoint_name: "Claude Fast",
model: "anthropic/claude-3-haiku",
status: "error",
error_message: "Rate limit exceeded"
})
Summary
Functions
Creates a changeset for request creation.
Formats the cost for display.
Formats the latency for display.
Formats the token count for display.
Extracts the model name without provider prefix.
Returns a CSS class for the status badge.
Returns a human-readable status label.
Returns the list of valid request types.
Returns the list of valid status types.
Functions
Creates a changeset for request creation.
Formats the cost for display.
Cost is stored in nanodollars (1/1000000 of a dollar) for precision. Shows appropriate precision based on the amount:
= $1.00: 2 decimal places ($1.23)
= $0.01: 2 decimal places ($0.05)
= $0.0001: 4 decimal places ($0.0012)
$0: 6 decimal places ($0.000030)
Formats the latency for display.
Formats the token count for display.
Extracts the model name without provider prefix.
Returns a CSS class for the status badge.
Returns a human-readable status label.
Returns the list of valid request types.
Returns the list of valid status types.