From 0a2f477654ba1a581a9d8d30423539de8dd500a2 Mon Sep 17 00:00:00 2001 From: Folx Ops Date: Sun, 7 Jun 2026 15:16:21 +0000 Subject: [PATCH] Kozmicni dogodki: generiraj posamicno (6 klicev) + boljse parsanje Array klic je padel (Failed to parse) ker gpt-5-mini ni vrnil cistega JSON arraya. Zdaj 6 locenih klicev z {...} objektom (isti vzorec kot horoskop), markdown fence stripping in vecji token limit. --- server/horoscope-generator.ts | 91 ++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/server/horoscope-generator.ts b/server/horoscope-generator.ts index 6097dab..ff4dfed 100644 --- a/server/horoscope-generator.ts +++ b/server/horoscope-generator.ts @@ -145,49 +145,53 @@ export async function generateCosmicEvents(): Promise { const d = new Date(); const monthName = d.toLocaleDateString("de-DE", { month: "long", year: "numeric" }); - try { - const response = await openai.chat.completions.create({ - model: "gpt-5-mini", - messages: [ - { - role: "system", - content: `Du bist ein erfahrener Astrologe, der die aktuellen kosmischen Ereignisse (Planetenkonstellationen, Mondphasen, Retrograden, Tierkreis-Saison) für eine deutschsprachige Volksmusik- und Schlager-Website beschreibt. Du kennst die realen astronomischen Daten. Heute ist der ${today} (${monthName}). Beschreibe ausschließlich Ereignisse, die JETZT, rund um dieses Datum tatsächlich aktiv oder relevant sind. Verwende realistische, dem aktuellen Datum entsprechende Datumsangaben. Schreibe warm und zugänglich auf Deutsch.`, - }, - { - role: "user", - content: `Erstelle die 6 wichtigsten aktuellen kosmischen Ereignisse für heute (${today}). Dazu sollten gehören: die aktuelle Tierkreis-Saison (Sonne im Zeichen), die aktuelle Mondphase, eventuelle Retrograden, sowie relevante Planetentransite (Venus, Mars, Saturn, Jupiter). + const eventSlots = [ + "die aktuelle Tierkreis-Saison (Sonne im aktuellen Sternzeichen), type=season, icon=sun", + "die aktuelle Mondphase (Vollmond oder Neumond, je nachdem was näher ist), type=moon, icon=moon oder newmoon", + "ein aktueller Venus-Transit (Venus im aktuellen Zeichen), type=transit, icon=venus", + "ein aktueller Mars- oder Merkur-Aspekt (inkl. eventueller Retrograde), type=transit oder retrograde, icon=mars oder mercury", + "ein aktueller Saturn-Transit, type=transit, icon=saturn", + "ein aktueller Jupiter-Transit, type=transit, icon=jupiter", + ]; -Antworte NUR mit einem JSON-Array von genau 6 Objekten (kein Markdown, keine Erklärung) in diesem exakten Format: -[ - { - "title": "Kurzer Titel, z.B. 'Vollmond im Skorpion' oder 'Zwillinge-Saison'", - "description": "3-4 Sätze über die Bedeutung dieses Ereignisses und seinen Einfluss.", - "dateRange": "Realistische Datumsangabe passend zum heutigen Datum, z.B. '21. Mai – 20. Juni 2026' oder '11. Juni 2026'", - "icon": "EINER VON: mercury, venus, moon, newmoon, sun, saturn, jupiter, mars", - "type": "EINER VON: retrograde, moon, transit, season", - "affectedSigns": ["3-4 betroffene Sternzeichen auf Deutsch, z.B. Widder, Stier, Zwillinge, Krebs, Löwe, Jungfrau, Waage, Skorpion, Schütze, Steinbock, Wassermann, Fische"] - } -]`, - }, - ], - max_completion_tokens: 2500, - }); + const results: any[] = []; - const content = response.choices[0]?.message?.content || ""; - const jsonMatch = content.match(/\[[\s\S]*\]/); - if (!jsonMatch) { - console.error("Failed to parse cosmic events"); - return; - } + for (let i = 0; i < eventSlots.length; i++) { + try { + const response = await openai.chat.completions.create({ + model: "gpt-5-mini", + messages: [ + { + role: "system", + content: `Du bist ein erfahrener Astrologe für eine deutschsprachige Volksmusik- und Schlager-Website. Du kennst die realen astronomischen Daten. Heute ist der ${today} (${monthName}). Beschreibe nur Ereignisse, die rund um dieses Datum tatsächlich aktiv sind, mit realistischen Datumsangaben. Antworte ausschließlich auf Deutsch.`, + }, + { + role: "user", + content: `Beschreibe folgendes aktuelles kosmisches Ereignis für heute (${today}): ${eventSlots[i]}. - const parsed = JSON.parse(jsonMatch[0]); - if (!Array.isArray(parsed) || parsed.length === 0) { - console.error("Cosmic events response is not a valid array"); - return; - } +Antworte NUR mit einem JSON-Objekt (kein Markdown, keine Erklärung) in diesem exakten Format: +{ + "title": "Kurzer Titel, z.B. 'Vollmond im Skorpion' oder 'Zwillinge-Saison'", + "description": "3-4 Sätze über die Bedeutung dieses Ereignisses und seinen Einfluss.", + "dateRange": "Realistische Datumsangabe passend zum heutigen Datum, z.B. '21. Mai – 20. Juni 2026' oder '11. Juni 2026'", + "icon": "EINER VON: mercury, venus, moon, newmoon, sun, saturn, jupiter, mars", + "type": "EINER VON: retrograde, moon, transit, season", + "affectedSigns": ["3-4 betroffene Sternzeichen auf Deutsch"] +}`, + }, + ], + max_completion_tokens: 3000, + }); - for (let i = 0; i < parsed.length; i++) { - const ev = parsed[i]; + let content = response.choices[0]?.message?.content || ""; + content = content.replace(/```json/gi, "").replace(/```/g, "").trim(); + const jsonMatch = content.match(/\{[\s\S]*\}/); + if (!jsonMatch) { + console.error(`Failed to parse cosmic event ${i}. Raw:`, content.slice(0, 300)); + continue; + } + + const ev = JSON.parse(jsonMatch[0]); const icon = VALID_ICONS.includes(ev.icon) ? ev.icon : "moon"; const type = VALID_TYPES.includes(ev.type) ? ev.type : "transit"; const signs = Array.isArray(ev.affectedSigns) ? ev.affectedSigns : []; @@ -202,10 +206,11 @@ Antworte NUR mit einem JSON-Array von genau 6 Objekten (kein Markdown, keine Erk type, affectedSigns: JSON.stringify(signs), }); + results.push(ev.title); + } catch (err: any) { + console.error(`Error generating cosmic event ${i}:`, err.message); } - - console.log(`Generated ${parsed.length} cosmic events for ${today}.`); - } catch (err: any) { - console.error("Error generating cosmic events:", err.message); } + + console.log(`Generated ${results.length} cosmic events for ${today}.`); }