from pydantic import BaseModel, Field from typing import Literal class introductionChapter(BaseModel): model_output: str = Field(..., title="Odpowiedz modelu") situation: str = Field(..., title="Wskazanie i zwrot opisu sytuacji, którą przedstawił użytkownik") think: str = Field(..., title="Wskazanie i zwrot myśli, którą przedstawił użytkownik") emotion: str = Field(..., title="Wskazanie i zwrot emocji, którą przedstawił użytkownik") chapter_end: str = Field(..., title="Ustawiamy na true jeśli użytkownik został przepytany i możemy przejść do etapu wskazanie definicji zniekształcenia") class UnderstandDistortionClassifier(BaseModel): message_type: Literal["understand", "no_understand"] = Field( ..., description=( """Klasyfikuje odpowiedź użytkownika po przedstawieniu wykrytego zniekształcenia poznawczego i jego definicji. 'understand' oznacza, że użytkownik rozumie zniekształcenie i chce nad nim pracować. Zakwalifikuj również jeśli użytkownik wykazuje lekkie przekonanie że może spróbujmy albo pyta jak zacząć. 'no understand' oznacza brak zrozumienia zniekształcenia.""" ), ) class SocraticQuestion(BaseModel): question: str = Field(..., description="Pytanie sokratejskie") class Summary(BaseModel): summarized_output: str = Field(..., title="Odpowiedź modelu") class SocraticEval(BaseModel): cue_hit: bool = Field(..., description="Czy odpowiedź dotyka sensu intencji (True dla advance/refine, False dla switch)") route: Literal["advance", "refine", "switch"] = Field(..., description="Decyzja: przechodzimy do wniosku / zostajemy i doprecyzowujemy / zmieniamy intencję") explanation: str = Field(..., description="Objaśnienie podjętej decyzji dotyczącej przejścia do wniosku, zostania i doprecyzowania lub zmiany intencji") proposition: str = Field(..., description="Jeśli roure = refine - podaj wskazówki dotyczące tego o co spytać w kolejnym pytaniu aby osiągnać przejście do wniosku. Konkretne rzeczy jakie powinno się umieścić w nowym pytaniu. Odwołuj się do explanation czyli czemu odrzuciłeś przejście do wniosku to warto zawrzeć również") class AltThoughtOut(BaseModel): alt_thought: str = Field(..., min_length=5, description="Zwięzła, realistyczna, życzliwa alternatywna myśl w 1. osobie.") reasoning: str = Field(..., min_length=5, description="Dlaczego ta myśl jest bardziej zrównoważona (krótko).") class AltInviteOut(BaseModel): assistant_message: str = Field(..., min_length=5) class AltReviewOut(BaseModel): is_ok: bool assistant_message: str = Field(..., min_length=5) class AltCloseOut(BaseModel): assistant_message: str = Field(..., min_length=5) class SecurityCheckUser(BaseModel): decision: bool message_to_user: str = Field(..., title="Wiadomość do użytkownika") explanation: str = Field(..., title="Wyjasnienie czemu wiadomosc użytkownika jest odrzucona") class ThoughtChecker(BaseModel): decision_beliefs: bool = Field(..., description="True, jeśli wiadomość zawiera MYŚL lub PRZEKONANIE; False, jeśli to opis sytuacji lub emocji.")