Cyclium.Conversations (Cyclium v0.1.9)

Copy Markdown View Source

Context module for managing interactive conversations. Provides start, claim, resolve, abandon, and query operations.

Summary

Functions

abandon(conversation_id, reason \\ "user_abandoned")

@spec abandon(binary(), binary()) ::
  {:ok, Cyclium.Schemas.Conversation.t()} | {:error, term()}

check_constraints(conv)

@spec check_constraints(Cyclium.Schemas.Conversation.t()) ::
  :ok | {:warn, :last_turn} | {:error, :budget_exceeded}

claim(conversation_id, principal)

@spec claim(binary(), map()) ::
  {:ok, Cyclium.Schemas.Conversation.t()}
  | {:error, :already_claimed | :not_found}

Claim a conversation (for :pool and :any audience modes). Sets the principal and transitions status to :open.

get(id)

@spec get(binary()) :: Cyclium.Schemas.Conversation.t() | nil

get!(id)

increment_turn(conversation_id, tokens \\ 0)

@spec increment_turn(binary(), non_neg_integer()) ::
  {:ok, Cyclium.Schemas.Conversation.t()} | {:error, term()}

list_awaiting(opts \\ [])

@spec list_awaiting(keyword()) :: [Cyclium.Schemas.Conversation.t()]

list_for_actor(actor_id, opts \\ [])

@spec list_for_actor(
  binary() | atom(),
  keyword()
) :: [Cyclium.Schemas.Conversation.t()]

list_for_principal(principal_id, opts \\ [])

@spec list_for_principal(
  binary(),
  keyword()
) :: [Cyclium.Schemas.Conversation.t()]

resolve(conversation_id, outcome, result \\ %{})

@spec resolve(binary(), binary(), map()) ::
  {:ok, Cyclium.Schemas.Conversation.t()} | {:error, term()}

Resolve a conversation with an outcome and result.

start(attrs)

@spec start(map()) ::
  {:ok, Cyclium.Schemas.Conversation.t()} | {:error, Ecto.Changeset.t()}

Start a new conversation.

Required fields

  • :actor_id — which interactive actor handles this conversation
  • :name — display name

Optional fields

  • :principal — map with "type", "id", "label"
  • :goal — GoalSpec map (JSON-encoded on write)
  • :origin — Origin map
  • :audience_target — AudienceTarget map

timeout(conversation_id)

@spec timeout(binary()) :: {:ok, Cyclium.Schemas.Conversation.t()} | {:error, term()}

update_collected_fields(conversation_id, new_fields)

@spec update_collected_fields(binary(), map()) ::
  {:ok, Cyclium.Schemas.Conversation.t()} | {:error, term()}