69 lines
2.1 KiB
Ruby
69 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
|
|
RSpec.describe ProblemCheck::AiLlmStatus do
|
|
subject(:check) { described_class.new }
|
|
|
|
fab!(:llm_model)
|
|
|
|
let(:post_url) { "https://api.openai.com/v1/chat/completions" }
|
|
let(:success_response) do
|
|
{
|
|
model: "gpt-4-turbo",
|
|
usage: {
|
|
max_prompt_tokens: 131_072,
|
|
},
|
|
choices: [
|
|
{ message: { role: "assistant", content: "test" }, finish_reason: "stop", index: 0 },
|
|
],
|
|
}.to_json
|
|
end
|
|
|
|
let(:error_response) do
|
|
{ message: "API key error! Please check you have supplied the correct API key." }.to_json
|
|
end
|
|
|
|
before do
|
|
stub_request(:post, post_url).to_return(status: 200, body: success_response, headers: {})
|
|
SiteSetting.ai_summarization_model = "custom:#{llm_model.id}"
|
|
SiteSetting.ai_summarization_enabled = true
|
|
end
|
|
|
|
describe "#call" do
|
|
it "does nothing if discourse-ai plugin disabled" do
|
|
SiteSetting.discourse_ai_enabled = false
|
|
expect(check).to be_chill_about_it
|
|
end
|
|
|
|
context "with discourse-ai plugin enabled for the site" do
|
|
before { SiteSetting.discourse_ai_enabled = true }
|
|
|
|
it "returns a problem with an LLM model" do
|
|
stub_request(:post, post_url).to_return(status: 403, body: error_response, headers: {})
|
|
message =
|
|
"#{I18n.t("dashboard.problem.ai_llm_status", { base_path: Discourse.base_path, model_name: llm_model.display_name, model_id: llm_model.id })}"
|
|
|
|
expect(described_class.new.call).to contain_exactly(
|
|
have_attributes(
|
|
identifier: "ai_llm_status",
|
|
target: llm_model.id,
|
|
priority: "high",
|
|
message: message,
|
|
details: {
|
|
model_id: llm_model.id,
|
|
model_name: llm_model.display_name,
|
|
error: JSON.parse(error_response)["message"],
|
|
},
|
|
),
|
|
)
|
|
end
|
|
|
|
it "does not return a problem if the LLM models are working" do
|
|
stub_request(:post, post_url).to_return(status: 200, body: success_response, headers: {})
|
|
expect(check).to be_chill_about_it
|
|
end
|
|
end
|
|
end
|
|
end
|