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
parent
bcc1c0aac2
commit
9beb8c15a3
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue