Add CollectionChat StreamProvider

This commit is contained in:
Claudio Ortolina
2026-04-13 10:09:50 +01:00
parent 24a3cc9265
commit 34f484cc81
2 changed files with 89 additions and 0 deletions
@@ -0,0 +1,38 @@
defmodule MusicLibrary.Chats.CollectionChat do
@moduledoc """
Chat implementation for the music collection using OpenAI streaming with web search.
"""
@behaviour MusicLibrary.Chats.StreamProvider
alias MusicLibrary.Chats.Prompt
@impl true
@spec stream_response([map()], String.t(), (String.t() -> any())) :: :ok | {:error, term()}
def stream_response(messages, collection_summary, callback) do
instructions = build_instructions(collection_summary)
OpenAI.chat_stream(messages, on_chunk: callback, instructions: instructions)
end
defp build_instructions(collection_summary) do
record_count = count_records(collection_summary)
Prompt.build("""
Answer questions about the user's music collection. \
Use the provided collection catalog as your primary reference. \
The collection contains #{record_count} records.
Collection catalog:
#{collection_summary}\
""")
end
defp count_records(""), do: 0
defp count_records(summary) do
summary
|> String.split("\n")
|> length()
end
end