|
8 | 8 | let(:guardrail_response_hash) do |
9 | 9 | { |
10 | 10 | llm_response: { |
11 | | - "message" => { |
12 | | - "role" => "assistant", |
13 | | - "content" => "False | None", |
| 11 | + message: { |
| 12 | + role: "assistant", |
| 13 | + content: "False | None", |
14 | 14 | }, |
15 | | - "finish_reason" => "stop", |
| 15 | + finish_reason: "stop", |
16 | 16 | }, |
17 | 17 | llm_guardrail_result: "False | None", |
18 | 18 | llm_prompt_tokens: 13, |
19 | 19 | llm_completion_tokens: 7, |
20 | 20 | llm_cached_tokens: 10, |
21 | 21 | } |
22 | 22 | end |
| 23 | + let(:guardrail_result) { build(:guardrails_multiple_checker_result, :pass) } |
23 | 24 |
|
24 | 25 | it "raises an error if the llm_provider is unknown" do |
25 | 26 | expect { described_class.call(input, llm_prompt_name, :unknown_provider) } |
|
33 | 34 | guardrails_config = { |
34 | 35 | system_prompt: "{guardrails} {date}", |
35 | 36 | user_prompt: "{input}", |
36 | | - guardrails: %w[costs personal unique_answer_guardrail], |
| 37 | + guardrails: %w[political appropriate_language], |
37 | 38 | guardrail_definitions: { |
38 | | - "costs" => "This is a costs guardrail", |
39 | | - "personal" => "This is a personal guardrail", |
40 | | - "unique_answer_guardrail" => "This is a unique answer guardrail", |
| 39 | + "political" => "This is a political guardrail", |
| 40 | + "appropriate_language" => "This is an appropriate language guardrail", |
41 | 41 | }, |
42 | 42 | }.with_indifferent_access |
43 | 43 |
|
|
49 | 49 | described_class.call(input, llm_prompt_name, llm_provider) |
50 | 50 | expect(Guardrails::OpenAI::MultipleChecker).to have_received(:call).with(input, instance_of(Guardrails::MultipleChecker::Prompt)) |
51 | 51 | end |
| 52 | + |
| 53 | + it "returns the guardrail result" do |
| 54 | + result = described_class.call(input, llm_prompt_name, llm_provider) |
| 55 | + expect(result).to eq(guardrail_result) |
| 56 | + end |
52 | 57 | end |
53 | 58 |
|
54 | 59 | context "when the llm_provider is :claude" do |
|
58 | 63 | guardrails_config = { |
59 | 64 | system_prompt: "{guardrails} {date}", |
60 | 65 | user_prompt: "{input}", |
61 | | - guardrails: %w[costs personal unique_answer_guardrail], |
| 66 | + guardrails: %w[political appropriate_language], |
62 | 67 | guardrail_definitions: { |
63 | | - "costs" => "This is a costs guardrail", |
64 | | - "personal" => "This is a personal guardrail", |
65 | | - "unique_answer_guardrail" => "This is a unique answer guardrail", |
| 68 | + "political" => "This is a political guardrail", |
| 69 | + "appropriate_language" => "This is an appropriate language guardrail", |
66 | 70 | }, |
67 | 71 | }.with_indifferent_access |
68 | 72 |
|
|
75 | 79 | expect(Guardrails::Claude::MultipleChecker).to have_received(:call).with(input, instance_of(Guardrails::MultipleChecker::Prompt)) |
76 | 80 | end |
77 | 81 |
|
| 82 | + it "returns the guardrail result" do |
| 83 | + result = described_class.call(input, llm_prompt_name, llm_provider) |
| 84 | + expect(result).to eq(guardrail_result) |
| 85 | + end |
| 86 | + |
78 | 87 | context "when the response format is incorrect" do |
79 | 88 | it "throws a ResponseError" do |
80 | 89 | guardrail_result = 'False | "1, 2"' |
|
0 commit comments