Files
ubicloud/spec/model/ai/inference_endpoint_spec.rb
Jeremy Evans e6b7e5e879 Change rubocop TargetRubyVersion to 3.4
Disable Style/RedundantLineContinuation, as it incorrectly removes
line continutations in rhizome/host/lib/vm_setup.rb that are not
redundant.

All code changes are for _1 => it in blocks.
2025-04-26 06:51:19 +09:00

90 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require_relative "../spec_helper"
RSpec.describe InferenceEndpoint do
subject(:inference_endpoint) do
described_class.new(
name: "ie-name",
location_id: Location::HETZNER_FSN1_ID,
model_name: "model-name"
) { it.id = "c76fcd0c-3fb0-40cc-8732-d71869ee1341" }
end
describe "#display_states" do
let(:strand) { instance_double(Strand) }
before do
allow(inference_endpoint).to receive(:strand).and_return(strand)
end
context "when state is running" do
before { allow(strand).to receive(:label).and_return("wait") }
it "returns 'running'" do
expect(inference_endpoint.display_state).to eq("running")
end
end
context "when state is deleting" do
before { allow(strand).to receive(:label).and_return("destroy") }
it "returns 'deleting'" do
expect(inference_endpoint.display_state).to eq("deleting")
end
end
context "when state is creating" do
before { allow(strand).to receive(:label).and_return("wait_replicas") }
it "returns 'creating'" do
expect(inference_endpoint.display_state).to eq("creating")
end
end
end
describe "#path" do
it "returns the correct path" do
expect(inference_endpoint.path).to eq("/location/eu-central-h1/inference-endpoint/ie-name")
end
end
shared_examples "chat completion request" do |development|
let(:http) { instance_double(Net::HTTP, read_timeout: 30) }
let(:load_balancer) { instance_double(LoadBalancer, health_check_protocol: "https") }
before do
allow(Net::HTTP).to receive(:new).and_return(http)
allow(http).to receive(:use_ssl=).with(true)
allow(http).to receive(:read_timeout=).with(30)
allow(inference_endpoint).to receive(:load_balancer).and_return(load_balancer)
end
it "sends the request correctly" do
if development
allow(Config).to receive(:development?).and_return(true)
allow(http).to receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_NONE)
end
expect(http).to receive(:request) do |req|
expect(req).to be_an_instance_of(Net::HTTP::Post)
expect(req["Content-Type"]).to eq("application/json")
expect(req["Authorization"]).to eq("Bearer api_key")
expect(req.body).to eq({model: "model-name", messages: [{role: "user", content: "what's a common greeting?"}]}.to_json)
end.and_return("hello")
expect(inference_endpoint.chat_completion_request("what's a common greeting?", "hostname", "api_key")).to eq("hello")
end
end
describe "#chat_completion_request" do
context "when production" do
it_behaves_like "chat completion request", false
end
context "when development" do
it_behaves_like "chat completion request", true
end
end
end