Skip to content

Commit c2d2ad4

Browse files
authored
feat: policy tools (#29)
1 parent bf6242c commit c2d2ad4

4 files changed

Lines changed: 91 additions & 1 deletion

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "qualifire",
3-
"version": "1.7.0",
3+
"version": "1.8.0",
44
"description": "Qualifire client SDK",
55
"main": "./lib/index.js",
66
"files": [

src/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ export class Qualifire {
276276
grounding_multi_turn_mode:
277277
evaluationProxyAPIRequest.groundingMultiTurnMode,
278278
policy_multi_turn_mode: evaluationProxyAPIRequest.policyMultiTurnMode,
279+
policy_include_tools: evaluationProxyAPIRequest.policyIncludeTools,
279280
policy_target: evaluationProxyAPIRequest.policyTarget,
280281
allowed_topics: evaluationProxyAPIRequest.allowedTopics,
281282
topic_scoping_mode:
@@ -370,6 +371,10 @@ export class Qualifire {
370371
EvaluationRequestV2.tool_selection_quality_check,
371372
tuq_mode: EvaluationRequestV2.tuqMode ?? EvaluationRequestV2.tsqMode,
372373
assertions: EvaluationRequestV2.assertions,
374+
assertions_mode: EvaluationRequestV2.assertionsMode,
375+
policy_multi_turn_mode: EvaluationRequestV2.policyMultiTurnMode,
376+
policy_include_tools: EvaluationRequestV2.policyIncludeTools,
377+
policy_target: EvaluationRequestV2.policyTarget,
373378
topic_scoping_mode: EvaluationRequestV2.topicScopingMode,
374379
topic_scoping_multi_turn_mode:
375380
EvaluationRequestV2.topicScopingMultiTurnMode,

src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ export const EvaluationRequestV2Schema = z.object({
133133
hallucinationsMode: z.enum(ModelModeEnum).default('balanced').optional(),
134134
groundingMultiTurnMode: z.boolean().default(false).optional(),
135135
policyMultiTurnMode: z.boolean().default(false).optional(),
136+
policyIncludeTools: z.boolean().default(false).optional(),
136137
policyTarget: z.enum(PolicyTargetEnum).optional(),
137138
topicScopingMode: z.enum(ModelModeEnum).default('balanced').optional(),
138139
topicScopingMultiTurnMode: z.boolean().default(false).optional(),
@@ -201,6 +202,7 @@ export const EvaluationProxyAPIRequestSchema = z
201202
hallucinationsMode: z.enum(ModelModeEnum).default('balanced').optional(),
202203
groundingMultiTurnMode: z.boolean().default(false).optional(),
203204
policyMultiTurnMode: z.boolean().default(false).optional(),
205+
policyIncludeTools: z.boolean().default(false).optional(),
204206
policyTarget: z.enum(PolicyTargetEnum).optional(),
205207
topic_scoping_mode: z.enum(ModelModeEnum).default('balanced').optional(),
206208
topic_scoping_multi_turn_mode: z.boolean().default(false).optional(),

test/index.spec.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,87 @@ describe('index', () => {
9797
expect(body.topic_scoping_target).toBe('input');
9898
});
9999
});
100+
101+
describe('policy_include_tools field', () => {
102+
it('should pass policy_include_tools in the API request (direct mode)', async () => {
103+
const capturedBodies: Record<string, unknown>[] = [];
104+
global.fetch = jest
105+
.fn()
106+
.mockImplementation((_url: string, options: { body: string }) => {
107+
capturedBodies.push(
108+
JSON.parse(options.body) as Record<string, unknown>
109+
);
110+
return Promise.resolve({
111+
ok: true,
112+
json: () =>
113+
Promise.resolve({
114+
status: 'passed',
115+
score: 100,
116+
evaluationResults: [],
117+
}),
118+
});
119+
}) as typeof fetch;
120+
121+
const client = new qualifire.Qualifire({ apiKey: 'test-key' });
122+
await client.evaluate({
123+
input: 'What is AI?',
124+
output: 'Artificial Intelligence',
125+
groundingCheck: true,
126+
policyIncludeTools: true,
127+
});
128+
129+
expect(capturedBodies).toHaveLength(1);
130+
const body = capturedBodies[0];
131+
expect(body.policy_include_tools).toBe(true);
132+
});
133+
134+
it('should pass policy_include_tools in the API request (framework mode)', async () => {
135+
const capturedBodies: Record<string, unknown>[] = [];
136+
global.fetch = jest
137+
.fn()
138+
.mockImplementation((_url: string, options: { body: string }) => {
139+
capturedBodies.push(
140+
JSON.parse(options.body) as Record<string, unknown>
141+
);
142+
return Promise.resolve({
143+
ok: true,
144+
json: () =>
145+
Promise.resolve({
146+
status: 'passed',
147+
score: 100,
148+
evaluationResults: [],
149+
}),
150+
});
151+
}) as typeof fetch;
152+
153+
const client = new qualifire.Qualifire({ apiKey: 'test-key' });
154+
await client.evaluate({
155+
framework: 'openai',
156+
request: {
157+
model: 'gpt-4o',
158+
messages: [{ role: 'user', content: 'Hello' }],
159+
},
160+
response: {
161+
id: 'test',
162+
object: 'chat.completion',
163+
created: 123,
164+
model: 'gpt-4o',
165+
choices: [
166+
{
167+
index: 0,
168+
message: { role: 'assistant', content: 'Hi' },
169+
finish_reason: 'stop',
170+
},
171+
],
172+
usage: { prompt_tokens: 1, completion_tokens: 1, total_tokens: 2 },
173+
},
174+
groundingCheck: true,
175+
policyIncludeTools: true,
176+
});
177+
178+
expect(capturedBodies).toHaveLength(1);
179+
const body = capturedBodies[0];
180+
expect(body.policy_include_tools).toBe(true);
181+
});
182+
});
100183
});

0 commit comments

Comments
 (0)