mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-02 20:15:22 +02:00
Add streaming chat
This commit is contained in:
parent
d1b83541c1
commit
3f9858a67f
9 changed files with 127 additions and 13 deletions
|
@ -20,4 +20,42 @@ class Chat < ApplicationRecord
|
|||
)
|
||||
end
|
||||
end
|
||||
|
||||
def generate_next_ai_response
|
||||
if messages.conversation.ordered.last&.role == "assistant"
|
||||
Rails.logger.info("Skipping response because last message was an assistant message")
|
||||
return
|
||||
end
|
||||
|
||||
openai.chat(
|
||||
parameters: {
|
||||
model: "gpt-4o-mini",
|
||||
stream: streamer,
|
||||
n: 1,
|
||||
messages: messages.conversation.order(:created_at).map do |message|
|
||||
{
|
||||
role: message.role,
|
||||
content: message.content
|
||||
}
|
||||
end
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
def openai
|
||||
OpenAI::Client.new(access_token: ENV["OPENAI_ACCESS_TOKEN"])
|
||||
end
|
||||
|
||||
def streamer
|
||||
message = messages.create!(
|
||||
role: "assistant",
|
||||
content: ""
|
||||
)
|
||||
|
||||
proc do |chunk, _bytesize|
|
||||
new_content = chunk.dig("choices", 0, "delta", "content")
|
||||
message.update(content: message.content + new_content) if new_content
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue