This commit is contained in:
lorenzejay
2026-01-14 16:27:50 -08:00
parent e4bd7889fd
commit 3a6702e9c8
2 changed files with 20 additions and 22 deletions

View File

@@ -14,8 +14,7 @@ interactions:
false\n }\n }\n}\n\nDo not include the OpenAPI schema in the final output. false\n }\n }\n}\n\nDo not include the OpenAPI schema in the final output.
Ensure the final output does not include any code block markers like ```json Ensure the final output does not include any code block markers like ```json
or ```python."},{"role":"user","content":"{\"valid\":false,\"feedback\":\"The or ```python."},{"role":"user","content":"{\"valid\":false,\"feedback\":\"The
task result has more than 10 words. It violates the guardrail requirement of task result contains more than 10 words. Specifically, it has 24 words.\"}"}],"model":"gpt-4o","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"valid":{"description":"Whether
having less than 10 words.\"}"}],"model":"gpt-4o","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"valid":{"description":"Whether
the task output complies with the guardrail","title":"Valid","type":"boolean"},"feedback":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"A the task output complies with the guardrail","title":"Valid","type":"boolean"},"feedback":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"A
feedback about the task output if it is not valid","title":"Feedback"}},"required":["valid","feedback"],"title":"LLMGuardrailResult","type":"object","additionalProperties":false},"name":"LLMGuardrailResult","strict":true}},"stream":false}' feedback about the task output if it is not valid","title":"Feedback"}},"required":["valid","feedback"],"title":"LLMGuardrailResult","type":"object","additionalProperties":false},"name":"LLMGuardrailResult","strict":true}},"stream":false}'
headers: headers:
@@ -30,7 +29,7 @@ interactions:
connection: connection:
- keep-alive - keep-alive
content-length: content-length:
- '1867' - '1835'
content-type: content-type:
- application/json - application/json
cookie: cookie:
@@ -61,16 +60,15 @@ interactions:
uri: https://api.openai.com/v1/chat/completions uri: https://api.openai.com/v1/chat/completions
response: response:
body: body:
string: "{\n \"id\": \"chatcmpl-Cy5PPD1uYxgIbXU5hMI4xS5PK4Swt\",\n \"object\": string: "{\n \"id\": \"chatcmpl-Cy5UxZ7PQkv5X90uKpxCSTKfmOMng\",\n \"object\":
\"chat.completion\",\n \"created\": 1768436507,\n \"model\": \"gpt-4o-2024-08-06\",\n \"chat.completion\",\n \"created\": 1768436851,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"{\\\"valid\\\":false,\\\"feedback\\\":\\\"The \"assistant\",\n \"content\": \"{\\\"valid\\\":false,\\\"feedback\\\":\\\"The
task result has more than 10 words. It violates the guardrail requirement task result contains more than 10 words. Specifically, it has 24 words.\\\"}\",\n
of having less than 10 words.\\\"}\",\n \"refusal\": null,\n \"annotations\": \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\":
[]\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
\ }\n ],\n \"usage\": {\n \"prompt_tokens\": 369,\n \"completion_tokens\": 363,\n \"completion_tokens\": 26,\n \"total_tokens\": 389,\n \"prompt_tokens_details\":
32,\n \"total_tokens\": 401,\n \"prompt_tokens_details\": {\n \"cached_tokens\": {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_a0e9480a2f\"\n}\n" \"default\",\n \"system_fingerprint\": \"fp_a0e9480a2f\"\n}\n"
@@ -82,7 +80,7 @@ interactions:
Content-Type: Content-Type:
- application/json - application/json
Date: Date:
- Thu, 15 Jan 2026 00:21:47 GMT - Thu, 15 Jan 2026 00:27:32 GMT
Server: Server:
- cloudflare - cloudflare
Strict-Transport-Security: Strict-Transport-Security:
@@ -98,17 +96,17 @@ interactions:
cf-cache-status: cf-cache-status:
- DYNAMIC - DYNAMIC
content-length: content-length:
- '946' - '914'
openai-organization: openai-organization:
- OPENAI-ORG-XXX - OPENAI-ORG-XXX
openai-processing-ms: openai-processing-ms:
- '463' - '993'
openai-project: openai-project:
- OPENAI-PROJECT-XXX - OPENAI-PROJECT-XXX
openai-version: openai-version:
- '2020-10-01' - '2020-10-01'
x-envoy-upstream-service-time: x-envoy-upstream-service-time:
- '671' - '1014'
x-openai-proxy-wasm: x-openai-proxy-wasm:
- v0.1 - v0.1
x-ratelimit-limit-requests: x-ratelimit-limit-requests:
@@ -188,8 +186,8 @@ interactions:
uri: https://api.openai.com/v1/chat/completions uri: https://api.openai.com/v1/chat/completions
response: response:
body: body:
string: "{\n \"id\": \"chatcmpl-Cy5PQkMg7YJYa44FYy6Wb04G3qmx4\",\n \"object\": string: "{\n \"id\": \"chatcmpl-Cy5UzjLkbVZHlwyGGpbwO6KTz1C8U\",\n \"object\":
\"chat.completion\",\n \"created\": 1768436508,\n \"model\": \"gpt-4o-2024-08-06\",\n \"chat.completion\",\n \"created\": 1768436853,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"{\\\"valid\\\":true,\\\"feedback\\\":null}\",\n \"assistant\",\n \"content\": \"{\\\"valid\\\":true,\\\"feedback\\\":null}\",\n
\ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\":
@@ -207,7 +205,7 @@ interactions:
Content-Type: Content-Type:
- application/json - application/json
Date: Date:
- Thu, 15 Jan 2026 00:21:48 GMT - Thu, 15 Jan 2026 00:27:33 GMT
Server: Server:
- cloudflare - cloudflare
Strict-Transport-Security: Strict-Transport-Security:
@@ -227,13 +225,13 @@ interactions:
openai-organization: openai-organization:
- OPENAI-ORG-XXX - OPENAI-ORG-XXX
openai-processing-ms: openai-processing-ms:
- '316' - '238'
openai-project: openai-project:
- OPENAI-PROJECT-XXX - OPENAI-PROJECT-XXX
openai-version: openai-version:
- '2020-10-01' - '2020-10-01'
x-envoy-upstream-service-time: x-envoy-upstream-service-time:
- '349' - '253'
x-openai-proxy-wasm: x-openai-proxy-wasm:
- v0.1 - v0.1
x-ratelimit-limit-requests: x-ratelimit-limit-requests:

View File

@@ -185,8 +185,8 @@ def test_task_guardrail_process_output(task_output):
result = guardrail(task_output) result = guardrail(task_output)
assert result[0] is False assert result[0] is False
# Check that feedback is provided (wording varies by LLM)
assert "10 words" in result[1] or "more than 10" in result[1] or "exceeds" in result[1] assert result[1] and len(result[1]) > 0
guardrail = LLMGuardrail( guardrail = LLMGuardrail(
description="Ensure the result has less than 500 words", llm=LLM(model="gpt-4o") description="Ensure the result has less than 500 words", llm=LLM(model="gpt-4o")