CrucibleIR.Backend.Completion (CrucibleIR v0.3.0)

View Source

Universal 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

choice()

@type choice() :: %{
  index: non_neg_integer(),
  message: CrucibleIR.Backend.Prompt.message(),
  finish_reason: finish_reason(),
  thinking: thinking() | nil
}

finish_reason()

@type finish_reason() :: :stop | :length | :tool_calls | :content_filter | :error

t()

@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
}

thinking()

@type thinking() :: %{content: String.t(), tokens: non_neg_integer()}

usage()

@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
}