class ComplianceCheckMiddleware(ChatMiddleware): def __init__(self, *args, **kwargs): self._init_compliant_agent() super().__init__(*args, **kwargs) async def process( self, context: ChatContext, next: Callable[[ChatContext], Awaitable[None]], ): check_result: ReviewResults = await self._get_compliance_result(context) if not check_result.is_compliance: self._output_result( context, f"😒We can’t keep providing the service because:\n{fill(check_result.reason)}") return await next(context) @staticmethod def _output_result(context: ChatContext, response: str) -> None: if context.is_streaming: #4 async def output_stream() -> AsyncIterable[AgentRunResponseUpdate]: yield AgentRunResponseUpdate(contents=[TextContent(text=response)]) context.result = output_stream() else: context.result = AgentRunResponse( messages=[ChatMessage(role=Role.ASSISTANT, text=response)] ) async def _get_compliance_result(self, context: ChatContext) -> ReviewResults: messages = [message for message in context.messages if message.role.value == "user"][-5:] response = await self.agent.run(messages) #2 check_result = ReviewResults.model_validate_json(response.text) #3 return check_result def _init_compliant_agent(self) -> None: client = AGUIChatClient( #1 endpoint="http://127.0.0.1:8888/compliance" ) self.agent = client.as_agent( name="compliance_agent", instructions="You’re a compliance officer, and you review user requests." )