lib/gen_ai.ex

defmodule GenAI do

  @doc """
  Creates a new chat context.
  """
  def chat(thread_provider \\ :default)
  def chat(:default), do: %GenAI.Thread.Standard{}
  def chat(:standard), do: %GenAI.Thread.Standard{}


  # Delegate function calls to the GenAI.ThreadProtocol implementation for the current context.
  defdelegate with_model(context, model), to: GenAI.ThreadProtocol
  defdelegate with_tool(context, tool), to: GenAI.ThreadProtocol
  defdelegate with_tools(context, tools), to: GenAI.ThreadProtocol
  defdelegate with_api_key(context, provider, api_key), to: GenAI.ThreadProtocol
  defdelegate with_api_org(context, provider, api_org), to: GenAI.ThreadProtocol
  defdelegate with_setting(context, setting, value), to: GenAI.ThreadProtocol
  defdelegate with_safety_setting(context, safety_setting, threshold), to: GenAI.ThreadProtocol
  defdelegate with_message(context, message, options \\ nil), to: GenAI.ThreadProtocol
  defdelegate with_messages(context, messages, options \\ nil), to: GenAI.ThreadProtocol
  defdelegate stream(context, handler), to: GenAI.ThreadProtocol

  # Temp exception to avoid breaking existing code, add new endpoint to return updated thead with response
  def run(context) do
    with {:ok, completion, state} <- GenAI.ThreadProtocol.run(context)  do
        {:ok, completion}
    end
  end






end