Human-in-the-Loop через middleware: добавлен solution.py

This commit is contained in:
2026-05-26 08:56:11 +00:00
parent bdcd900d40
commit 563cc603b8
@@ -0,0 +1,55 @@
# Human-in-the-Loop Middleware
#
# В этом примере реализован простой middleware, который позволяет
# вставлять человека в цикл обработки запросов. Он может быть использован
# в веб‑приложениях, чат‑ботах и других системах, где требуется
# ручная проверка или подтверждение.
from typing import Callable, Any, Dict
class HumanInTheLoopMiddleware:
"""
Middleware, который вызывает функцию‑обработчик для
каждого запроса. Если обработчик возвращает ``False``
(или ``None``), запрос считается отклонённым и
передаётся в ручную обработку.
"""
def __init__(self, handler: Callable[[Dict[str, Any]], bool]):
self.handler = handler
def __call__(self, request: Dict[str, Any]) -> Dict[str, Any]:
# Предварительная проверка
approved = self.handler(request)
if not approved:
# Запрос отправляется в ручную обработку
# В реальном проекте здесь может быть вызов внешнего сервиса
# или отправка письма/сообщения в чат.
return {
"status": "pending",
"reason": "human review required",
"original": request,
}
# Если проверка пройдена – продолжаем обработку
return {
"status": "approved",
"original": request,
}
# Пример простого обработчика, который проверяет наличие ключа "approve"
# в запросе. Если ключ отсутствует – запрос отклоняется.
def simple_handler(request: Dict[str, Any]) -> bool:
return request.get("approve", False)
# Пример использования
if __name__ == "__main__":
middleware = HumanInTheLoopMiddleware(simple_handler)
# Запрос, который будет отклонён
req1 = {"id": 1, "data": "test"}
print(middleware(req1))
# Запрос, который будет одобрен
req2 = {"id": 2, "data": "test", "approve": True}
print(middleware(req2))