CrucibleIR.Backend.Completion (CrucibleIR v0.3.0)
View SourceUniversal completion IR for backend responses.
Normalizes completion outputs across providers (OpenAI, Anthropic, local, etc.)
while preserving provider-specific data in raw_response and metadata.
Fields
:choices- Response choices:model- Model name used:usage- Token usage summary:latency_ms- Total latency in milliseconds:time_to_first_token_ms- Time to first token in milliseconds:request_id- Request correlation ID:trace_id- Trace correlation ID:raw_response- Provider response payload:metadata- Additional metadata
Summary
Types
@type choice() :: %{ index: non_neg_integer(), message: CrucibleIR.Backend.Prompt.message(), finish_reason: finish_reason(), thinking: thinking() | nil }
@type finish_reason() :: :stop | :length | :tool_calls | :content_filter | :error
@type t() :: %CrucibleIR.Backend.Completion{ choices: [choice()], latency_ms: non_neg_integer() | nil, metadata: map(), model: String.t() | nil, raw_response: map() | nil, request_id: String.t() | nil, time_to_first_token_ms: non_neg_integer() | nil, trace_id: String.t() | nil, usage: usage() | nil }
@type thinking() :: %{content: String.t(), tokens: non_neg_integer()}
@type usage() :: %{ prompt_tokens: non_neg_integer(), completion_tokens: non_neg_integer(), total_tokens: non_neg_integer(), thinking_tokens: non_neg_integer() | nil, cached_tokens: non_neg_integer() | nil }