mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-02-07 12:08:13 +00:00
Add support for chat with AI personas - Allow enabling chat for AI personas that have an associated user - Add new setting `allow_chat` to AI persona to enable/disable chat - When a message is created in a DM channel with an allowed AI persona user, schedule a reply job - AI replies to chat messages using the persona's `max_context_posts` setting to determine context - Store tool calls and custom prompts used to generate a chat reply on the `ChatMessageCustomPrompt` table - Add tests for AI chat replies with tools and context At the moment unlike posts we do not carry tool calls in the context. No @mention support yet for ai personas in channels, this is future work
44 lines
1.7 KiB
Ruby
44 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe DiscourseAi::Completions::PromptMessagesBuilder do
|
|
let(:builder) { DiscourseAi::Completions::PromptMessagesBuilder.new }
|
|
|
|
it "should allow merging user messages" do
|
|
builder.push(type: :user, content: "Hello", name: "Alice")
|
|
builder.push(type: :user, content: "World", name: "Bob")
|
|
|
|
expect(builder.to_a).to eq([{ type: :user, content: "Alice: Hello\nBob: World" }])
|
|
end
|
|
|
|
it "should allow adding uploads" do
|
|
builder.push(type: :user, content: "Hello", name: "Alice", upload_ids: [1, 2])
|
|
|
|
expect(builder.to_a).to eq(
|
|
[{ type: :user, name: "Alice", content: "Hello", upload_ids: [1, 2] }],
|
|
)
|
|
end
|
|
|
|
it "should support function calls" do
|
|
builder.push(type: :user, content: "Echo 123 please", name: "Alice")
|
|
builder.push(type: :tool_call, content: "echo(123)", name: "echo", id: 1)
|
|
builder.push(type: :tool, content: "123", name: "echo", id: 1)
|
|
builder.push(type: :user, content: "Hello", name: "Alice")
|
|
expected = [
|
|
{ type: :user, content: "Echo 123 please", name: "Alice" },
|
|
{ type: :tool_call, content: "echo(123)", name: "echo", id: "1" },
|
|
{ type: :tool, content: "123", name: "echo", id: "1" },
|
|
{ type: :user, content: "Hello", name: "Alice" },
|
|
]
|
|
expect(builder.to_a).to eq(expected)
|
|
end
|
|
|
|
it "should drop a tool call if it is not followed by tool" do
|
|
builder.push(type: :user, content: "Echo 123 please", name: "Alice")
|
|
builder.push(type: :tool_call, content: "echo(123)", name: "echo", id: 1)
|
|
builder.push(type: :user, content: "OK", name: "James")
|
|
|
|
expected = [{ type: :user, content: "Alice: Echo 123 please\nJames: OK" }]
|
|
expect(builder.to_a).to eq(expected)
|
|
end
|
|
end
|