Spectre.Input (Spectre v0.3.0)

Copy Markdown View Source

Normalized inbound user turn.

Host applications can pass strings, atom-key maps, or string-key maps at the public boundary. Spectre immediately converts them into this struct so router checks, prompt rendering, and action execution do not depend on external payload shapes.

input = Spectre.Input.new(%{"text" => "Hello", "meta" => %{"locale" => "en"}})
input = Spectre.Input.put_meta(input, :channel, :web)

Summary

Functions

Fetches enriched metadata.

Merges enriched metadata onto the input.

Normalizes raw inbound input into a Spectre input struct.

Stores enriched metadata on the input.

Types

t()

@type t() :: %Spectre.Input{
  meta: map(),
  raw: term(),
  source: Spectre.Input.Source.t() | nil,
  text: String.t()
}

Functions

fetch_meta(input, key)

@spec fetch_meta(t(), atom() | String.t()) :: {:ok, term()} | :error

Fetches enriched metadata.

{:ok, "en"} = Spectre.Input.fetch_meta(input, :locale)

merge_meta(input, meta)

@spec merge_meta(t(), map() | keyword()) :: t()

Merges enriched metadata onto the input.

input = Spectre.Input.merge_meta(input, locale: "en", channel: :web)

new(input)

@spec new(t() | String.t() | map() | term()) :: t()

Normalizes raw inbound input into a Spectre input struct.

Spectre.Input.new("hello")
Spectre.Input.new(%{text: "hello", meta: %{tenant_id: 123}})

put_meta(input, key, value)

@spec put_meta(t(), atom() | String.t(), term()) :: t()

Stores enriched metadata on the input.

input = Spectre.Input.put_meta(input, :locale, "en")