discourse-ai/spec/configuration/llm_enumerator_spec.rb
Sam 2a5c60db10
FEATURE: display more places where AI is used / Chat streamer (#1278)
* FEATURE: display more places where AI is used

- Usage was not showing automation or image caption in llm list.
- Also: FIX - reasoning models would time out incorrectly after 60 seconds (raised to 10 minutes)

* correct enum not to enumerate non configured models

* FEATURE: implement chat streamer

This implements a basic chat streamer, it provides 2 things:

1. Gives feedback to the user when LLM is generating
2. Streams stuff much more efficiently to client (given it may take 100ms or so per call to update chat)
2025-04-24 16:22:19 +10:00

72 lines
2.0 KiB
Ruby

# frozen_string_literal: true
RSpec.describe DiscourseAi::Configuration::LlmEnumerator do
fab!(:fake_model)
fab!(:llm_model)
fab!(:seeded_model)
fab!(:automation) do
Fabricate(:automation, script: "llm_report", name: "some automation", enabled: true)
end
describe "#values_for_serialization" do
it "returns an array for that can be used for serialization" do
fake_model.destroy!
expect(described_class.values_for_serialization).to eq(
[
{
id: llm_model.id,
name: llm_model.display_name,
vision_enabled: llm_model.vision_enabled,
},
],
)
expect(
described_class.values_for_serialization(allowed_seeded_llm_ids: [seeded_model.id.to_s]),
).to contain_exactly(
{
id: seeded_model.id,
name: seeded_model.display_name,
vision_enabled: seeded_model.vision_enabled,
},
{
id: llm_model.id,
name: llm_model.display_name,
vision_enabled: llm_model.vision_enabled,
},
)
end
end
describe "#global_usage" do
it "returns a hash of Llm models in use globally" do
SiteSetting.ai_helper_model = "custom:#{fake_model.id}"
SiteSetting.ai_helper_enabled = true
expect(described_class.global_usage).to eq(fake_model.id => [{ type: :ai_helper }])
end
it "returns information about automation rules" do
automation.fields.create!(
component: "text",
name: "model",
metadata: {
value: "custom:#{fake_model.id}",
},
target: "script",
)
usage = described_class.global_usage
expect(usage).to eq(
{ fake_model.id => [{ type: :automation, name: "some automation", id: automation.id }] },
)
end
it "doesn't error on spam when spam detection is enabled but moderation setting is missing" do
SiteSetting.ai_spam_detection_enabled = true
expect { described_class.global_usage }.not_to raise_error
end
end
end