# frozen_string_literal: true module ::DiscourseAi module AiBot describe AnthropicBot do def bot_user User.find(EntryPoint::CLAUDE_V2_ID) end before do SiteSetting.ai_bot_enabled_chat_bots = "claude-2" SiteSetting.ai_bot_enabled = true end let(:bot) { described_class.new(bot_user) } fab!(:post) describe "system message" do it "includes the full command framework" do prompt = bot.system_prompt(post, allow_commands: true) expect(prompt).to include("read") expect(prompt).to include("search_query") end end it "does not include half parsed function calls in reply" do completion1 = " search hello world junk REPLY completion1 = { completion: completion1 }.to_json completion2 = { completion: completion2 }.to_json completion3 = { completion: " should be stripped expect(raw).to start_with("\n\n search hello world 77 " bot.populate_functions( partial: nil, reply: prompt, functions: functions, done: true, current_delta: "", ) expect(functions.found?).to eq(true) expect(functions.to_a.length).to eq(1) expect(functions.to_a).to eq( [{ name: "search", arguments: "{\"search_query\":\"hello world\"}" }], ) end end describe "#update_with_delta" do describe "get_delta" do it "can properly remove first leading space" do context = {} reply = +"" reply << bot.get_delta({ completion: " Hello" }, context) reply << bot.get_delta({ completion: " World" }, context) expect(reply).to eq("Hello World") end it "can properly remove Assistant prefix" do context = {} reply = +"" reply << bot.get_delta({ completion: "Hello " }, context) expect(reply).to eq("Hello ") reply << bot.get_delta({ completion: "world" }, context) expect(reply).to eq("Hello world") end end end end end end