"""Explicit text gates for documentation recipes. Set both NYRAXIS environment variables.""" import os from nyraxis_sdk.client import NyraxisClient def require_allowed(client, *, input, output=None): result = client.evaluate(input=input, output=output, capture_mode="metadata") if result.evaluation_status != "complete" or result.errors or result.policies_evaluated < 1: raise RuntimeError("Nyraxis evaluation incomplete") if not result.allowed: raise PermissionError("Nyraxis policy blocked this text") return result def guarded_text_call(prompt, generate): """generate(prompt) must return a complete string, before release to the user.""" if not isinstance(prompt, str) or not prompt.strip(): raise ValueError("Provide a non-empty prompt") with NyraxisClient( api_key=os.environ["NYRAXIS_API_KEY"], base_url=os.environ["NYRAXIS_BASE_URL"], agent_name=os.getenv("NYRAXIS_AGENT_NAME", "docs-integration"), timeout=30, ) as client: require_allowed(client, input=prompt) output = generate(prompt) if not isinstance(output, str): raise TypeError("Adapter must return text") require_allowed(client, input=prompt, output=output) return output