lib/planck/agent/ai_behaviour.ex

defmodule Planck.Agent.AIBehaviour do
  @moduledoc false

  # Wraps Planck.AI.stream/3 so it can be mocked in tests via Mox.

  @callback stream(Planck.AI.Model.t(), Planck.AI.Context.t(), keyword()) ::
              Enumerable.t(Planck.AI.Stream.t())

  @callback get_model(atom(), String.t()) :: {:ok, Planck.AI.Model.t()} | {:error, :not_found}
  @callback get_model(atom(), String.t(), keyword()) ::
              {:ok, Planck.AI.Model.t()} | {:error, :not_found}

  @doc false
  @spec client() :: module()
  def client do
    Application.get_env(:planck_agent, :ai_client, Planck.AI)
  end
end