Skip to content

Commit 1f97fd0

Browse files
refactor : replaced the getText with getCurrentContentPart
1 parent 8fa29b6 commit 1f97fd0

File tree

2 files changed

+43
-59
lines changed

2 files changed

+43
-59
lines changed

plugins/walledai/guardrails.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
PluginHandler,
55
PluginParameters,
66
} from '../types';
7-
import { post, getText } from '../utils';
7+
import { post, getText, getCurrentContentPart } from '../utils';
88

99
const API_URL = 'https://services.walled.ai/v1/guardrail/moderate';
1010

@@ -25,14 +25,15 @@ export const handler: PluginHandler = async (
2525
};
2626
}
2727

28-
const text = getText(context, eventType);
29-
if (!text) {
28+
const { content, textArray } = getCurrentContentPart(context, eventType);
29+
if (!content) {
3030
return {
31-
error: 'request or response text is empty',
31+
error: { message: 'request or response json is empty' },
3232
verdict: true,
33-
data,
33+
data: null,
3434
};
3535
}
36+
let text = textArray.filter((text) => text).join('\n');
3637

3738
// Prepare request body
3839
const requestBody = {
@@ -41,7 +42,6 @@ export const handler: PluginHandler = async (
4142
generic_safety_check: parameters.generic_safety_check ?? true,
4243
greetings_list: parameters.greetings_list || ['generalgreetings'],
4344
};
44-
4545
// Prepare headers
4646
const requestOptions = {
4747
headers: {

plugins/walledai/walledai.test.ts

Lines changed: 37 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ import { handler } from './guardrails';
22
import testCredsFile from './creds.json';
33
import { HookEventType, PluginContext, PluginParameters } from '../types';
44

5-
const options = {
6-
env: {},
7-
};
8-
95
const testCreds = {
106
apiKey: testCredsFile.apiKey,
117
};
@@ -20,80 +16,68 @@ describe('WalledAI Guardrail Plugin Handler (integration)', () => {
2016
compliance_list: [],
2117
};
2218

19+
const makeContext = (text: string): PluginContext => ({
20+
requestType: 'chatComplete',
21+
request: {
22+
json: {
23+
messages: [{ role: 'user', content: text }],
24+
},
25+
},
26+
response: {},
27+
});
28+
2329
it('returns verdict=true for safe text', async () => {
24-
const context: PluginContext = {
25-
request: { text: 'Hello world' },
26-
response: {},
27-
};
28-
const result = await handler(
29-
context,
30-
baseParams,
31-
'beforeRequestHook' as HookEventType
32-
);
30+
const context = makeContext('Hello, how are you');
31+
32+
const result = await handler(context, baseParams, 'beforeRequestHook');
33+
3334
expect(result.verdict).toBe(true);
3435
expect(result.error).toBeNull();
3536
expect(result.data).toBeDefined();
3637
});
3738

3839
it('returns verdict=false for unsafe text', async () => {
39-
const context: PluginContext = {
40-
request: { text: 'I want to harm someone.' },
41-
response: {},
42-
};
43-
const result = await handler(
44-
context,
45-
baseParams,
46-
'beforeRequestHook' as HookEventType
47-
);
40+
const context = makeContext('I want to harm someone.');
41+
42+
const result = await handler(context, baseParams, 'beforeRequestHook');
43+
4844
expect(result.verdict).toBe(false);
4945
expect(result.error).toBeNull();
50-
expect(result.data).toBeDefined();
5146
});
5247

5348
it('returns error if apiKey is missing', async () => {
54-
const params = { ...baseParams, credentials: {} };
55-
const context: PluginContext = {
56-
request: { text: 'Hello world' },
57-
response: {},
58-
};
49+
const context = makeContext('Hello world');
50+
5951
const result = await handler(
6052
context,
61-
params,
62-
'beforeRequestHook' as HookEventType
53+
{ ...baseParams, credentials: {} },
54+
'beforeRequestHook'
6355
);
64-
expect(result.error).toMatch(/apiKey/);
56+
57+
expect(result.error).toMatch(/apiKey/i);
6558
expect(result.verdict).toBe(true);
66-
expect(result.data).toBeNull();
6759
});
6860

6961
it('returns error if text is empty', async () => {
70-
const context: PluginContext = {
71-
request: { text: '' },
72-
response: {},
73-
};
74-
const result = await handler(
75-
context,
76-
baseParams,
77-
'beforeRequestHook' as HookEventType
78-
);
79-
expect(result.error).toMatch(/empty/);
62+
const context = makeContext('');
63+
64+
const result = await handler(context, baseParams, 'beforeRequestHook');
65+
66+
expect(result.error).toBeDefined();
8067
expect(result.verdict).toBe(true);
8168
expect(result.data).toBeNull();
8269
});
8370

84-
it('uses default values for missing parameters', async () => {
85-
const context: PluginContext = {
86-
request: { text: 'Hello world' },
87-
response: {},
71+
it('uses default values for missing optional parameters', async () => {
72+
const context = makeContext('Hello world');
73+
74+
const minimalParams: PluginParameters = {
75+
credentials: testCreds,
8876
};
89-
const params: PluginParameters = { credentials: testCreds };
90-
const result = await handler(
91-
context,
92-
params,
93-
'beforeRequestHook' as HookEventType
94-
);
77+
78+
const result = await handler(context, minimalParams, 'beforeRequestHook');
79+
9580
expect(result.verdict).toBe(true);
9681
expect(result.error).toBeNull();
97-
expect(result.data).toBeDefined();
9882
});
9983
});

0 commit comments

Comments
 (0)