import reflex as rx import json import requests from typing import Optional, List from pydantic import BaseModel, Field # from rerank import ReRanker # https://hub.guardrailsai.com/validator/guardrails/toxic_language from guardrails.hub import ToxicLanguage from guardrails import Guard # guardrails hub install hub://guardrails/detect_pii from guardrails.hub import DetectPII # https://hub.guardrailsai.com/validator/guardrails/qa_relevance_llm_eval from guardrails.hub import QARelevanceLLMEval import logging logger = logging.getLogger("uvicorn").info from .summary import summarize_it def IsPii(answer: str) -> bool: guard = Guard().use(DetectPII, ["EMAIL_ADDRESS", "PHONE_NUMBER"], "exception", ) try: guard.validate(answer) return True except Exception as e: print(e) return False def IsToxic(query: str, threshold=0.5) -> bool: # https://hub.guardrailsai.com/validator/guardrails/toxic_language # Use the Guard with the validator guard = Guard().use( ToxicLanguage, threshold=threshold, # high for highly toxic only validation_method="sentence", on_fail="exception" ) try: guard.validate(query) return False except Exception as e: print(e) # will output the toxic question return True def IsRelevant(answer: str, query: str, model: str="gpt-3.5-turbo") -> bool: guard = Guard().use( QARelevanceLLMEval, llm_callable=model, on_fail="exception", ) try: guard.validate( answer, metadata={"original_prompt": query}, ) return True except Exception as e: print(e) return False