from jinja2 import Template from pathlib import Path import datetime # Handle import for both package and direct execution try: from ..services.request_logger import RequestEventLogger except ImportError: # If relative import fails, try absolute import or create a dummy logger try: from app.services.request_logger import RequestEventLogger except ImportError: # Create a dummy logger class if import fails class RequestEventLogger: @staticmethod def log_generator_prompt(*args, **kwargs): pass """ MMDD → MM = Monat, DD = Tag 120 = 01.20. → Ende Steinbock 218 = 02.18. → Ende Wassermann """ def get_constellation(birthdate: str) -> str: """Leitet das Sternzeichen aus dem Geburtsdatum ab.""" date = datetime.datetime.strptime(birthdate, "%Y-%m-%d").date() constellations = [ (120, "Steinbock"), (218, "Wassermann"), (320, "Fische"), (420, "Widder"), (521, "Stier"), (621, "Zwillinge"), (722, "Krebs"), (823, "Löwe"), (923, "Jungfrau"), (1023, "Waage"), (1122, "Skorpion"), (1222, "Schütze"), (1231, "Steinbock") ] date_as_number = int(f"{date.month:02d}{date.day:02d}") for boundary, sign in constellations: if date_as_number <= boundary: return sign return "Steinbock" PROMPT_TEMPLATE = Template(""" Du bist ein Sexoskop-Orakel. Erstelle einen kurzen, prägnanten Horoskoptext (maximal 1-2 Sätze) für eine Person, basierend auf folgenden Informationen: Sprache: {{ lang }} Datum: {{ card_date }} {# Geändert von birthdate #} Sternzeichen: {{ constellation }} Schlüsselbegriffe: {{ terms_str }} Der Text soll die Schlüsselbegriffe kreativ und subtil einbinden und zum angegebenen Datum passen. Antworte nur mit dem Horoskoptext. """) def build_prompt(lang: str, card_date: str, terms: list[str], request_id: str | None = None) -> str: """Baut den Prompt für das LLM basierend auf Geburtsdatum und Begriffen.""" constellation = get_constellation(card_date) terms_str = ", ".join(terms) prompt = PROMPT_TEMPLATE.render( lang=lang, card_date=card_date, constellation=constellation, terms_str=terms_str ) # Log the generator prompt if request_id: RequestEventLogger.log_generator_prompt( request_id=request_id, prompt=prompt, terms=terms, card_date=card_date, constellation=constellation, lang=lang ) return prompt