{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/ChatService.php",
"offset": 309,
"limit": 50
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/ChatService.php",
"content": " \/**\n * Extracts unique source information from search results.\n *\n * Collects document titles and scores from the search results,\n * deduplicating by title to provide a clean list of sources.\n * Optionally includes content preview if available.\n *\n * @param array<int, array{id: int|string, score: float, payload: array<string, mixed>}> $searchResults Vector search results\n *\n * @return array<int, array{title: string, score: float, content?: string}> Deduplicated source information\n *\/\n private function extractSources(array $searchResults): array\n {\n $sources = [];\n $seen = [];\n\n foreach ($searchResults as $result) {\n $payload = $result['payload'];\n $docTitle = (string) ($payload['document_title'] ?? '');\n\n \/\/ Skip empty titles or already seen titles\n if ($docTitle === '' || isset($seen[$docTitle])) {\n continue;\n }\n\n $source = [\n 'title' => $docTitle,\n 'score' => round($result['score'], 3),\n ];\n\n \/\/ Optionally include content preview\n if (isset($payload['content']) && is_string($payload['content'])) {\n $source['content'] = $payload['content'];\n }\n\n \/\/ Add collection info if available\n if (isset($payload['_collection'])) {\n $source['collection'] = $payload['_collection'];\n }\n\n $sources[] = $source;\n $seen[$docTitle] = true;\n }\n\n return $sources;\n }\n}\n",
"numLines": 48,
"startLine": 309,
"totalLines": 356
}
}
}