Fix: unknown type logging, event_update fallback to create, multi-event example

- AgentAIService: Raw response + type=unknown immer loggen (Debug)
- AgentActionService: event_update ohne Kandidaten + Zeitangabe → neu erstellen
  statt mit 'failed' abbrechen
- AgentAIService Prompt: Pflicht-Beispiel Reifenwechsel+Volleyball als
  Multi-Event mit reminder_at, explizit FALSCH: task anlegen markiert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main
boban 2026-04-19 08:04:02 +02:00
parent bcc1c0aac2
commit 9beb8c15a3
2 changed files with 27 additions and 3 deletions

View File

@ -104,6 +104,10 @@ class AgentAIService
$content = $response['choices'][0]['message']['content'] ?? null;
$usage = $response['usage'] ?? [];
\Log::info('AgentAI: Raw response', [
'content' => mb_substr($content ?? '', 0, 500),
]);
$parsed = self::parseJson($content);
// Multi-Action: Array von Aktionen
@ -112,6 +116,10 @@ class AgentAIService
}
if (($parsed['type'] ?? 'unknown') === 'unknown' && $content) {
\Log::warning('AgentAI: type=unknown Raw content', [
'content' => mb_substr($content, 0, 500),
]);
// Harte Sicherung: wenn das Modell rohen JSON-Text liefert, der
// NICHT geparst werden konnte, darf der nie als "message" landen —
// sonst liest die TTS geschweifte Klammern vor.
@ -652,6 +660,14 @@ EMAIL:
Multi (PFLICHT bei mehreren Aktionen gleichzeitig!):
[{"type": "event", "data": {"title": "Zahnarzt", "datetime": "2026-04-20 08:00"}}, {"type": "task", "data": {"title": "Zahnarzt vorbereiten", "priority": "medium"}}]
MULTI-EVENT MIT ERINNERUNG KORREKT (PFLICHT-BEISPIEL):
User: "Ich hab morgen Reifenwechsel um 17 Uhr, erinnere mich um 7:55. Und heute um 14 Uhr Volleyball, erinnere mich um 7:58."
[
{"type": "event", "data": {"title": "Reifenwechsel", "datetime": "{{ now('Europe/Vienna')->addDay()->setTime(17,0)->utc()->format('Y-m-d H:i') }}", "reminder_at": "{{ now('Europe/Vienna')->addDay()->setTime(7,55)->utc()->format('Y-m-d H:i:s') }}"}},
{"type": "event", "data": {"title": "Volleyball", "datetime": "{{ now('Europe/Vienna')->setTime(14,0)->utc()->format('Y-m-d H:i') }}", "reminder_at": "{{ now('Europe/Vienna')->setTime(7,58)->utc()->format('Y-m-d H:i:s') }}"}}
]
FALSCH: Als task oder task_update anlegen Termine mit Uhrzeit sind IMMER events!
PROMPT;
}

View File

@ -236,12 +236,20 @@ class AgentActionService
'incoming_data' => $data,
]);
$event = $candidates->first() ? Event::find($candidates->first()->id) : null;
if (!$event) {
// Kein Kandidat → neues Event erstellen falls Zeitangabe vorhanden
if ($candidates->isEmpty()) {
if (!empty($data['datetime']) || !empty($data['start'])) {
\Log::info('EventUpdate: Kein Kandidat gefunden → erstelle neues Event', ['search' => $search]);
$createData = array_merge($data, [
'title' => $data['title'] ?? $data['search'] ?? $search,
]);
return self::handleEvent($user, $createData);
}
return ['status' => 'failed', 'message' => "Kein Termin mit \"{$search}\" gefunden", 'meta' => ['search' => $search]];
}
$event = Event::find($candidates->first()->id);
\Log::info('EventUpdate: Ausgewählter Termin (vor Änderung)', [
'event_id' => $event->id,
'title' => $event->title,