Skip to content

Commit 24ecf68

Browse files
committed
Add additional bedrock stub to stub all answer relevancy calls
We're going to need to stub out these calls in multiple places so it makes sense to have a single method that does all the stubbing for us. I've also prepended stub_ to bedrock_invoke_model_openai_oss_tool_call. All other stubs have this so it makes sense to be consistent.
1 parent 48d93cf commit 24ecf68

6 files changed

Lines changed: 64 additions & 52 deletions

File tree

spec/lib/auto_evaluation/answer_relevancy/reason_generator_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
end
2424
let(:tools) { [prompts.fetch(:tool_spec)] }
2525
let!(:stub_bedrock) do
26-
bedrock_invoke_model_openai_oss_tool_call(
26+
stub_bedrock_invoke_model_openai_oss_tool_call(
2727
user_prompt,
2828
tools,
2929
reason_json,

spec/lib/auto_evaluation/answer_relevancy/statement_generator_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
end
1515
let(:tools) { [prompts.fetch(:tool_spec)] }
1616
let!(:stub_bedrock) do
17-
bedrock_invoke_model_openai_oss_tool_call(
17+
stub_bedrock_invoke_model_openai_oss_tool_call(
1818
user_prompt,
1919
tools,
2020
statements_json,

spec/lib/auto_evaluation/answer_relevancy/verdicts_generator_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
end
2222
let(:tools) { [prompts.fetch(:tool_spec)] }
2323
let!(:stub_bedrock) do
24-
bedrock_invoke_model_openai_oss_tool_call(
24+
stub_bedrock_invoke_model_openai_oss_tool_call(
2525
user_prompt,
2626
tools,
2727
verdicts_json,

spec/lib/auto_evaluation/answer_relevancy_spec.rb

Lines changed: 10 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,30 @@
11
RSpec.describe AutoEvaluation::AnswerRelevancy, :aws_credentials_stubbed do
22
describe ".call" do
3-
let(:prompts) { AutoEvaluation::Prompts.config.answer_relevancy }
43
let(:question_message) { "This is a test question message." }
54
let(:answer_message) { "This is a test answer message." }
6-
75
let(:statements) { ["This is the first statement.", "This is the second statement."] }
86
let(:statements_json) { { statements: }.to_json }
9-
let(:user_prompt_statements) do
10-
sprintf(
11-
prompts.fetch(:statements).fetch(:user_prompt),
12-
answer: answer_message,
13-
)
14-
end
15-
let(:statements_tools) { [prompts.fetch(:statements).fetch(:tool_spec)] }
16-
let!(:statements_stub) do
17-
bedrock_invoke_model_openai_oss_tool_call(
18-
user_prompt_statements,
19-
statements_tools,
20-
statements_json,
21-
)
22-
end
23-
247
let(:verdicts) do
258
[
269
{ "verdict" => "Yes" },
2710
{ "verdict" => "No", "reason" => "The statement is irrelevant." },
2811
]
2912
end
3013
let(:verdicts_json) { { verdicts: }.to_json }
31-
let(:user_prompt_verdicts) do
32-
sprintf(
33-
prompts.fetch(:verdicts).fetch(:user_prompt),
34-
question: question_message,
35-
statements:,
36-
)
37-
end
38-
let(:verdicts_tools) { [prompts.fetch(:verdicts).fetch(:tool_spec)] }
39-
let!(:verdicts_stub) do
40-
bedrock_invoke_model_openai_oss_tool_call(
41-
user_prompt_verdicts,
42-
verdicts_tools,
43-
verdicts_json,
44-
)
45-
end
46-
4714
let(:reason) { "This is the reason for the score." }
4815
let(:reason_json) { { reason: }.to_json }
49-
let(:user_prompt_reason) do
50-
sprintf(
51-
prompts.fetch(:reason).fetch(:user_prompt),
52-
score: 0.5,
53-
unsuccessful_verdicts_reasons: ["The statement is irrelevant."],
54-
question: question_message,
55-
)
56-
end
57-
let(:reason_tools) { [prompts.fetch(:reason).fetch(:tool_spec)] }
58-
let!(:reason_stub) do
59-
bedrock_invoke_model_openai_oss_tool_call(
60-
user_prompt_reason,
61-
reason_tools,
62-
reason_json,
16+
let!(:answer_relevancy_stubs) do
17+
stub_bedrock_invoke_model_openai_oss_answer_relevancy(
18+
question_message:,
19+
answer_message:,
20+
statements_json:,
21+
verdicts_json:,
22+
reason_json:,
6323
)
6424
end
25+
let(:statements_stub) { answer_relevancy_stubs[:statements] }
26+
let(:verdicts_stub) { answer_relevancy_stubs[:verdicts] }
27+
let(:reason_stub) { answer_relevancy_stubs[:reason] }
6528

6629
it "returns a results object with the expected attributes" do
6730
allow(Clock).to receive(:monotonic_time)

spec/lib/auto_evaluation/bedrock_openai_oss_invoke_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
]
2222
end
2323
let!(:stub) do
24-
bedrock_invoke_model_openai_oss_tool_call(
24+
stub_bedrock_invoke_model_openai_oss_tool_call(
2525
user_message,
2626
tools,
2727
{ "response" => "Expected response." }.to_json,

spec/support/stub_bedrock.rb

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def mock_titan_embedding(text, dimensions: Search::ChunkedContentRepository::TIT
4747
dimensions.times.map { random_generator.rand }
4848
end
4949

50-
def bedrock_invoke_model_openai_oss_tool_call(user_message, tools, content)
50+
def stub_bedrock_invoke_model_openai_oss_tool_call(user_message, tools, content)
5151
request_body = {
5252
include_reasoning: false,
5353
messages: [
@@ -85,4 +85,53 @@ def bedrock_invoke_model_openai_oss_tool_call(user_message, tools, content)
8585
endpoint_regex: OPENAI_GPT_OSS_ENDPOINT_REGEX,
8686
)
8787
end
88+
89+
def stub_bedrock_invoke_model_openai_oss_answer_relevancy(question_message:,
90+
answer_message:,
91+
statements_json: { statements: ["Statement."] }.to_json,
92+
verdicts_json: { verdicts: [{ "verdict" => "Yes" }] }.to_json,
93+
reason_json: { reason: "This is the reason for the score." }.to_json)
94+
prompts = AutoEvaluation::Prompts.config.answer_relevancy
95+
96+
statements_user_prompt = sprintf(
97+
prompts.fetch(:statements).fetch(:user_prompt),
98+
answer: answer_message,
99+
)
100+
verdicts_user_prompt = sprintf(
101+
prompts.fetch(:verdicts).fetch(:user_prompt),
102+
question: question_message,
103+
statements: JSON.parse(statements_json).fetch("statements"),
104+
)
105+
reason_user_prompt = sprintf(
106+
prompts.fetch(:reason).fetch(:user_prompt),
107+
score: 0.5,
108+
unsuccessful_verdicts_reasons: ["The statement is irrelevant."],
109+
question: question_message,
110+
)
111+
112+
statements_tools = [prompts.fetch(:statements).fetch(:tool_spec)]
113+
verdicts_tools = [prompts.fetch(:verdicts).fetch(:tool_spec)]
114+
reason_tools = [prompts.fetch(:reason).fetch(:tool_spec)]
115+
116+
stubs = {}
117+
stubs[:statements] = stub_bedrock_invoke_model_openai_oss_tool_call(
118+
statements_user_prompt,
119+
statements_tools,
120+
statements_json,
121+
)
122+
123+
stubs[:verdicts] = stub_bedrock_invoke_model_openai_oss_tool_call(
124+
verdicts_user_prompt,
125+
verdicts_tools,
126+
verdicts_json,
127+
)
128+
129+
stubs[:reason] = stub_bedrock_invoke_model_openai_oss_tool_call(
130+
reason_user_prompt,
131+
reason_tools,
132+
reason_json,
133+
)
134+
135+
stubs
136+
end
88137
end

0 commit comments

Comments
 (0)