identified performance issues with streamed markdown
This commit is contained in:
49
lib/elixir_ai/conversation_manager.ex
Normal file
49
lib/elixir_ai/conversation_manager.ex
Normal file
@@ -0,0 +1,49 @@
|
||||
defmodule ElixirAi.ConversationManager do
|
||||
use GenServer
|
||||
|
||||
def start_link(_opts), do: GenServer.start_link(__MODULE__, [], name: __MODULE__)
|
||||
def init(names), do: {:ok, names}
|
||||
|
||||
def create_conversation(name) do
|
||||
GenServer.call(__MODULE__, {:create, name})
|
||||
end
|
||||
|
||||
def open_conversation(name) do
|
||||
GenServer.call(__MODULE__, {:open, name})
|
||||
end
|
||||
|
||||
def list_conversations do
|
||||
GenServer.call(__MODULE__, :list)
|
||||
end
|
||||
|
||||
def handle_call({:create, name}, _from, names) do
|
||||
if name in names do
|
||||
{:reply, {:error, :already_exists}, names}
|
||||
else
|
||||
{:reply, start_runner(name), [name | names]}
|
||||
end
|
||||
end
|
||||
|
||||
def handle_call({:open, name}, _from, names) do
|
||||
if name in names do
|
||||
{:reply, start_runner(name), names}
|
||||
else
|
||||
{:reply, {:error, :not_found}, names}
|
||||
end
|
||||
end
|
||||
def handle_call(:list, _from, names) do
|
||||
{:reply, names, names}
|
||||
end
|
||||
|
||||
defp start_runner(name) do
|
||||
case DynamicSupervisor.start_child(
|
||||
ElixirAi.ChatRunnerSupervisor,
|
||||
{ElixirAi.ChatRunner, name: name}
|
||||
) do
|
||||
{:ok, pid} -> {:ok, pid}
|
||||
{:error, {:already_started, pid}} -> {:ok, pid}
|
||||
error -> error
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user