{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/VectorSearchService.php",
"content": "<?php\n\nnamespace Infrastructure\\AI;\n\n\/**\n * VectorSearchService - Unified semantic search interface\n *\n * Wraps OllamaService (embeddings) and QdrantService (vector search)\n * for consistent vector search across the application.\n *\/\nclass VectorSearchService\n{\n private OllamaService $ollama;\n private QdrantService $qdrant;\n\n public function __construct(?OllamaService $ollama = null, ?QdrantService $qdrant = null)\n {\n $this->ollama = $ollama ?? new OllamaService();\n $this->qdrant = $qdrant ?? new QdrantService();\n }\n\n \/**\n * Perform semantic search using embedding + vector search\n *\n * @param string $query Search query text\n * @param string $collection Qdrant collection name\n * @param int $limit Maximum results to return\n * @param string $embeddingModel Ollama model for embeddings\n * @return array Search results with scores and payloads\n *\/\n public function search(\n string $query,\n string $collection = 'documents',\n int $limit = 10,\n string $embeddingModel = 'mxbai-embed-large'\n ): array {\n \/\/ Generate embedding for query\n $embedding = $this->ollama->getEmbedding($query, $embeddingModel);\n\n if (empty($embedding)) {\n return [];\n }\n\n \/\/ Search in Qdrant\n return $this->qdrant->search($embedding, $collection, $limit);\n }\n\n \/**\n * Check if both services are available\n *\/\n public function isAvailable(): bool\n {\n return $this->ollama->isAvailable() && $this->qdrant->isAvailable();\n }\n\n \/**\n * Get embedding for text (useful for debugging\/testing)\n *\/\n public function getEmbedding(string $text, string $model = 'mxbai-embed-large'): array\n {\n return $this->ollama->getEmbedding($text, $model);\n }\n}\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/VectorSearchService.php",
"content": "<?php\n\nnamespace Infrastructure\\AI;\n\n\/**\n * VectorSearchService - Unified semantic search interface\n *\n * Wraps OllamaService (embeddings) and QdrantService (vector search)\n * for consistent vector search across the application.\n *\/\nclass VectorSearchService\n{\n private OllamaService $ollama;\n private QdrantService $qdrant;\n\n public function __construct(?OllamaService $ollama = null, ?QdrantService $qdrant = null)\n {\n $this->ollama = $ollama ?? new OllamaService();\n $this->qdrant = $qdrant ?? new QdrantService();\n }\n\n \/**\n * Perform semantic search using embedding + vector search\n *\n * @param string $query Search query text\n * @param string $collection Qdrant collection name\n * @param int $limit Maximum results to return\n * @param string $embeddingModel Ollama model for embeddings\n * @return array Search results with scores and payloads\n *\/\n public function search(\n string $query,\n string $collection = 'documents',\n int $limit = 10,\n string $embeddingModel = 'mxbai-embed-large'\n ): array {\n \/\/ Generate embedding for query\n $embedding = $this->ollama->getEmbedding($query, $embeddingModel);\n\n if (empty($embedding)) {\n return [];\n }\n\n \/\/ Search in Qdrant\n return $this->qdrant->search($embedding, $collection, $limit);\n }\n\n \/**\n * Check if both services are available\n *\/\n public function isAvailable(): bool\n {\n return $this->ollama->isAvailable() && $this->qdrant->isAvailable();\n }\n\n \/**\n * Get embedding for text (useful for debugging\/testing)\n *\/\n public function getEmbedding(string $text, string $model = 'mxbai-embed-large'): array\n {\n return $this->ollama->getEmbedding($text, $model);\n }\n}\n",
"structuredPatch": [],
"originalFile": null
}
}