{ "type": "REST", "operations": [ { "name": "Validate", "key": "validate", "inputParameters": [ { "name": "text", "displayName": "Content to check", "type": "string", "required": true, "bodyLocation": "input" } ], "outputParameters": [ { "name": "passed", "displayName": "Passed", "type": "boolean", "applyMappingConfig": "always" }, { "name": "reason", "displayName": "Reason", "type": "string", "applyMappingConfig": "always" } ], "config": { "method": "POST", "url": "v1/moderations", "httpResponseHandler": { "type": "script", "implementation": { "language": "javaScript", "script": "var statusCode = flwHttpResponse.getStatusCode();\n\nif(statusCode === 401 || statusCode === 403)\n{\n throw 'OpenAI Moderation API authentication failed (HTTP ' + statusCode + '). Verify the API key is configured correctly.';\n}\n\nif(statusCode < 200 || statusCode >= 300)\n{\n throw 'OpenAI Moderation API returned HTTP ' + statusCode + ': ' + flwHttpResponse.getBody();\n}\n\nvar result = flw.json.createObject();\nresult.putBoolean('passed', true);\nresult.putString('reason', '');\n\nvar json = flw.json.stringToJson(flwHttpResponse.getBody());\nvar results = json.path('results');\n\nif(results.isArray() && results.size() > 0) {\n var firstResult = results.path(0);\n if (firstResult.path('flagged').asBoolean()) {\n result.putBoolean('passed', false);\n var categories = firstResult.path('categories');\n var flagged = [];\n var fieldNames = categories.fieldNames();\n for (var i = 0; i < fieldNames.size(); i++) {\n var cat = fieldNames.get(i);\n if (categories.path(cat).asBoolean()) {\n flagged.push(cat);\n }\n }\n result.putString('reason', 'Content flagged: ' + flagged.join(', '));\n }\n}\n\nflwHttpResponse.setBody(flw.json.jsonToString(result));" } } }, "type": "search" } ], "config": { "baseUrl": "https://api.openai.com", "authorization": { "type": "bearer", "value": "${OPENAI_API_KEY}", "bearer": { "token": { "type": "secret", "value": "openAIKey" } } } }, "name": "OpenAI Moderation Guardrail", "key": "openAiModerationGuardrail", "description": "Checks content for policy violations using the OpenAI Moderation API. Detects hate, harassment, sexual content, violence, and self-harm." }