Spaces:
Sleeping
Sleeping
| 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: | |
| 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 |