-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathstreamingGuardrails.ts
More file actions
38 lines (32 loc) · 1.37 KB
/
streamingGuardrails.ts
File metadata and controls
38 lines (32 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { logger, task } from "@trigger.dev/sdk";
import { python } from "@trigger.dev/python";
// This task takes a prompt and character check interval
// Example: { "prompt": "What is a black hole?", "characterCheckInterval": 200 }
export const streamingGuardrailsTask = task({
id: "streaming-guardrails",
run: async (payload: { prompt: string; characterCheckInterval?: number }) => {
const checkInterval = payload.characterCheckInterval || 30;
const result = python.stream.runScript(
"./src/python/streaming-guardrails.py",
[payload.prompt, checkInterval.toString()],
);
let output = "";
for await (const chunk of result) {
logger.info(chunk);
output = chunk;
}
// The Python script streams the response to stdout in real-time, then returns JSON with full response text and guardrail metrics
const parsedResponse = JSON.parse(output.trim());
return {
response: parsedResponse.response,
guardrailTriggered: parsedResponse.guardrail_triggered,
guardrailReason: parsedResponse.guardrail_reason,
guardrailTriggeredAt: parsedResponse.guardrail_triggered_at,
guardrailEvaluatedTextLength:
parsedResponse.guardrail_evaluated_text_length,
charactersCheckedAtInterval:
parsedResponse.characters_checked_at_interval,
totalCharacters: parsedResponse.total_characters,
};
},
});