{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/scripts\/pipeline\/config.py"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/scripts\/pipeline\/config.py",
"content": "\"\"\"\nKI-System Pipeline Configuration\n\"\"\"\n\nimport os\n\n# Nextcloud Settings\nNEXTCLOUD_PATH = \"\/var\/www\/nextcloud\/data\/root\/files\/Documents\"\nSUPPORTED_EXTENSIONS = [\".pdf\", \".pptx\", \".docx\", \".md\", \".txt\"]\n\n# MariaDB Settings - Content Database (chunks, entities, semantic data)\nDB_CONFIG = {\n \"host\": \"localhost\",\n \"database\": \"ki_content\",\n \"user\": \"root\",\n \"password\": \"\", # Set via environment variable DB_PASSWORD\n \"charset\": \"utf8mb4\",\n}\n\n# Logging\/System Database (for pipeline_log)\nDB_LOG_CONFIG = {\n \"host\": \"localhost\",\n \"database\": \"ki_dev\",\n \"user\": \"root\",\n \"password\": \"\",\n \"charset\": \"utf8mb4\",\n}\n\n# Protokoll Database (for LLM call logging to ki_dev.protokoll)\nDB_PROTOKOLL_CONFIG = {\n \"host\": \"localhost\",\n \"database\": \"ki_dev\",\n \"user\": \"root\",\n \"password\": \"\",\n \"charset\": \"utf8mb4\",\n}\n\n# Qdrant Settings\nQDRANT_HOST = \"localhost\"\nQDRANT_PORT = 6333\nQDRANT_COLLECTIONS = {\n \"documents\": {\"size\": 1024, \"distance\": \"Cosine\"},\n \"mail\": {\"size\": 1024, \"distance\": \"Cosine\"},\n \"entities\": {\"size\": 1024, \"distance\": \"Cosine\"},\n}\n\n# Ollama Settings (Embeddings)\nOLLAMA_HOST = \"http:\/\/localhost:11434\"\nEMBEDDING_MODEL = \"mxbai-embed-large\" # 1024-dim, max ~1600 chars per chunk\nEMBEDDING_DIMENSION = 1024\n\n# Ollama Settings (Chat\/Generation)\n# NOTE: Now loaded dynamically from ki_dev.ai_models via model_registry.py\n# OLLAMA_CHAT_MODEL is set at the end of this file after imports\n\n# Anthropic Settings (Chat\/Analysis)\nANTHROPIC_MODEL = \"claude-opus-4-5-20251101\"\n\n# Chunking Settings\nCHUNK_OVERLAP_PERCENT = 10\nMIN_CHUNK_SIZE = 100\nMAX_CHUNK_SIZE = 2000\n\n# Pipeline Settings\nMAX_RETRIES = 3\nRETRY_BACKOFF_BASE = 2 # Seconds, exponential: 2, 4, 8\n\n# OCR Settings\nOCR_ENABLED = True\nOCR_LANGUAGE = \"deu\" # German\n\n# Logging\nLOG_LEVEL = \"INFO\"\n\n\ndef get_db_password():\n \"\"\"Get database password from environment or .env file.\"\"\"\n password = os.environ.get(\"DB_PASSWORD\", \"\")\n if not password:\n password = os.environ.get(\"MARIADB_ROOT_PASSWORD\", \"\")\n if not password:\n # Try to read from project .env file\n env_file = \"\/var\/www\/dev.campus.systemische-tools.de\/.env\"\n if os.path.exists(env_file):\n with open(env_file) as f:\n for line in f:\n if line.startswith(\"MARIADB_ROOT_PASSWORD=\"):\n password = line.split(\"=\", 1)[1].strip()\n break\n return password\n\n\ndef get_anthropic_key():\n \"\"\"Get Anthropic API key from environment or .env file.\"\"\"\n key = os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n # Try to read from project .env file\n env_file = \"\/var\/www\/dev.campus.systemische-tools.de\/.env\"\n if os.path.exists(env_file):\n with open(env_file) as f:\n for line in f:\n if line.startswith(\"ANTHROPIC_API_KEY=\"):\n key = line.split(\"=\", 1)[1].strip()\n break\n return key\n\n\n# Update DB configs with password\nDB_CONFIG[\"password\"] = get_db_password()\nDB_LOG_CONFIG[\"password\"] = get_db_password()\nDB_PROTOKOLL_CONFIG[\"password\"] = get_db_password()\n\n# Force Ollama for testing\nANTHROPIC_API_KEY = None\n\n\ndef get_chat_model_from_registry():\n \"\"\"Get default chat model from central registry (ki_dev.ai_models).\"\"\"\n try:\n from model_registry import get_chat_model\n\n return get_chat_model()\n except Exception:\n # Fallback if registry unavailable\n return \"ollama:gemma3:27b-it-qat\"\n\n\ndef get_ollama_model_id(full_key: str) -> str:\n \"\"\"Extract Ollama model ID from full_key.\n\n Example: 'ollama:gemma3:27b-it-qat' -> 'gemma3:27b-it-qat'\n \"\"\"\n if full_key.startswith(\"ollama:\"):\n return full_key[7:]\n return full_key\n\n\n# Dynamic model loading from database\nOLLAMA_CHAT_MODEL = get_ollama_model_id(get_chat_model_from_registry())\n",
"numLines": 140,
"startLine": 1,
"totalLines": 140
}
}
}