Human-in-the-Loop через middleware: добавлен solution.py
This commit is contained in:
@@ -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))
|
||||||
Reference in New Issue
Block a user