|
1 | | -RSpec.describe Guardrails::JailbreakChecker do |
| 1 | +RSpec.describe Guardrails::JailbreakChecker, :aws_credentials_stubbed do |
2 | 2 | let(:input) { "User question" } |
3 | 3 | let(:pass_value) { "PassValue" } |
4 | 4 |
|
5 | 5 | before do |
6 | 6 | allow(described_class).to receive_messages(pass_value:) |
7 | 7 | end |
8 | 8 |
|
9 | | - it "calls the OpenAI jailbreak checker by default" do |
| 9 | + it "calls the Claude jailbreak checker by default" do |
10 | 10 | result = { |
11 | 11 | llm_guardrail_result: pass_value, |
12 | 12 | llm_response: { |
|
21 | 21 | }, |
22 | 22 | } |
23 | 23 |
|
24 | | - allow(Guardrails::OpenAI::JailbreakChecker).to receive(:call).and_return(result) |
| 24 | + allow(Guardrails::Claude::JailbreakChecker).to receive(:call).and_return(result) |
25 | 25 | described_class.call(input) |
26 | | - expect(Guardrails::OpenAI::JailbreakChecker).to have_received(:call).with(input) |
| 26 | + expect(Guardrails::Claude::JailbreakChecker).to have_received(:call).with(input) |
27 | 27 | end |
28 | 28 |
|
29 | | - it "calls the Claude jailbreak checker when the provider is specified as :claude" do |
| 29 | + it "calls the OpenAI jailbreak checker when the provider is specified as :openai" do |
30 | 30 | result = { |
31 | 31 | llm_guardrail_result: pass_value, |
32 | 32 | llm_response: { |
|
41 | 41 | }, |
42 | 42 | } |
43 | 43 |
|
44 | | - allow(Guardrails::Claude::JailbreakChecker).to receive(:call).and_return(result) |
45 | | - described_class.call(input, :claude) |
46 | | - expect(Guardrails::Claude::JailbreakChecker).to have_received(:call).with(input) |
| 44 | + allow(Guardrails::OpenAI::JailbreakChecker).to receive(:call).and_return(result) |
| 45 | + described_class.call(input, :openai) |
| 46 | + expect(Guardrails::OpenAI::JailbreakChecker).to have_received(:call).with(input) |
47 | 47 | end |
48 | 48 |
|
49 | 49 | it "returns a result object" do |
50 | | - stub_openai_jailbreak_guardrails(input) |
| 50 | + stub_claude_jailbreak_guardrails(input) |
51 | 51 |
|
52 | 52 | result = described_class.call(input) |
| 53 | + |
53 | 54 | expect(result) |
54 | 55 | .to be_an_instance_of(described_class::Result) |
55 | 56 | .and have_attributes( |
56 | 57 | triggered: boolean, |
57 | | - llm_response: hash_including("message", "finish_reason", "index"), |
| 58 | + llm_response: hash_including(:content, :stop_reason), |
58 | 59 | llm_prompt_tokens: be_a(Integer), |
59 | 60 | llm_completion_tokens: be_a(Integer), |
60 | 61 | llm_cached_tokens: be_a(Integer).or(be_nil), |
| 62 | + model: be_a(String), |
61 | 63 | ) |
62 | 64 | end |
63 | 65 |
|
64 | 66 | it "returns a result object with triggered true when guardrails fail" do |
65 | | - allow(Guardrails::OpenAI::JailbreakChecker).to receive(:call).with(input).and_call_original |
66 | | - stub_openai_jailbreak_guardrails(input, triggered: true) |
| 67 | + allow(Guardrails::Claude::JailbreakChecker).to receive(:call).with(input).and_call_original |
| 68 | + stub_claude_jailbreak_guardrails(input, triggered: true) |
67 | 69 | second_input = "Second user question" |
68 | | - allow(Guardrails::OpenAI::JailbreakChecker) |
| 70 | + allow(Guardrails::Claude::JailbreakChecker) |
69 | 71 | .to receive(:call) |
70 | 72 | .with(second_input) |
71 | 73 | .and_return({ |
|
88 | 90 | end |
89 | 91 |
|
90 | 92 | it "returns a result object with triggered false when guardrails pass" do |
91 | | - stub_openai_jailbreak_guardrails(input, triggered: false) |
| 93 | + stub_claude_jailbreak_guardrails(input, triggered: false) |
92 | 94 | expect(described_class.call(input)).to have_attributes(triggered: false) |
93 | 95 | end |
94 | 96 | end |
0 commit comments