Files
Alpha/db/qdrant.sh
Martin adb36c0c48 feat: Phase 0 bootstrap — Qdrant deploy e schema PostgreSQL
- README.md: contesto ALPHA_PROJECT, architettura multi-agent, stack infrastrutturale
- CHANGELOG.md: documenta deploy Qdrant v1.17.0 e creazione database pompeo
- db/postgres.sql: schema DDL database pompeo (user_profile, memory_facts,
  finance_documents, behavioral_context, agent_messages) con multi-tenancy user_id
- db/qdrant.sh: script per creazione/ripristino collections Qdrant
  (episodes, knowledge, preferences) con payload indexes

Design decisions:
- Multi-tenancy via user_id su Qdrant e PostgreSQL (estendibile a nuovi utenti
  senza modifiche infrastrutturali)
- agent_messages come blackboard persistente per il Proactive Arbiter

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-21 10:55:39 +00:00

92 lines
3.5 KiB
Bash

#!/usr/bin/env bash
# =============================================================================
# ALPHA_PROJECT — Qdrant — Setup collections e payload indexes
# =============================================================================
# Collections già create il 2026-03-21. Script conservato per tracciabilità
# e disaster recovery (da eseguire su un'istanza Qdrant vuota).
#
# Prerequisiti:
# sudo microk8s kubectl port-forward svc/qdrant -n persistence 6333:6333
#
# Esecuzione:
# bash alpha/db/qdrant.sh
# =============================================================================
set -euo pipefail
QDRANT_URL="${QDRANT_URL:-http://localhost:6333}"
QDRANT_API_KEY="${QDRANT_API_KEY:-__Montecarlo00!}"
# Dimensione vettori: 1536 = text-embedding-3-small (Copilot, bootstrap phase)
# Da aggiornare a 768 alla migrazione verso nomic-embed-text su Ollama
VECTOR_SIZE=1536
header_key="api-key: ${QDRANT_API_KEY}"
echo "==> Connessione a ${QDRANT_URL}"
curl -sf "${QDRANT_URL}/" -H "${header_key}" | grep -o '"version":"[^"]*"'
echo ""
# -----------------------------------------------------------------------------
# Collections
# Architettura multi-tenant: isolamento via campo user_id nel payload.
# Valori user_id: "martin" | "shared" | <futuri utenti>
# -----------------------------------------------------------------------------
for COL in episodes knowledge preferences; do
echo "==> Creazione collection: ${COL}"
curl -sf -X PUT "${QDRANT_URL}/collections/${COL}" \
-H "${header_key}" \
-H "Content-Type: application/json" \
-d "{
\"vectors\": { \"size\": ${VECTOR_SIZE}, \"distance\": \"Cosine\" },
\"optimizers_config\": { \"default_segment_number\": 2 },
\"replication_factor\": 1
}" | grep -o '"status":"[^"]*"'
done
echo ""
# -----------------------------------------------------------------------------
# Payload indexes (per pre-filtering efficiente prima della ricerca vettoriale)
# -----------------------------------------------------------------------------
for COL in episodes knowledge preferences; do
echo "==> Indexes per collection: ${COL}"
for FIELD in user_id source category; do
printf " %-20s (keyword) → " "${FIELD}"
curl -sf -X PUT "${QDRANT_URL}/collections/${COL}/index" \
-H "${header_key}" \
-H "Content-Type: application/json" \
-d "{\"field_name\": \"${FIELD}\", \"field_schema\": \"keyword\"}" \
| grep -o '"status":"[^"]*"'
done
printf " %-20s (datetime) → " "date"
curl -sf -X PUT "${QDRANT_URL}/collections/${COL}/index" \
-H "${header_key}" \
-H "Content-Type: application/json" \
-d '{"field_name": "date", "field_schema": "datetime"}' \
| grep -o '"status":"[^"]*"'
printf " %-20s (bool) → " "action_required"
curl -sf -X PUT "${QDRANT_URL}/collections/${COL}/index" \
-H "${header_key}" \
-H "Content-Type: application/json" \
-d '{"field_name": "action_required", "field_schema": "bool"}' \
| grep -o '"status":"[^"]*"'
done
echo ""
# -----------------------------------------------------------------------------
# Verifica finale
# -----------------------------------------------------------------------------
echo "==> Collections attive:"
curl -sf "${QDRANT_URL}/collections" -H "${header_key}" \
| python3 -c "import sys,json; [print(' -', c['name']) for c in json.load(sys.stdin)['result']['collections']]"
echo ""
echo "✅ Setup Qdrant completato."
echo " Collections: episodes, knowledge, preferences"
echo " Payload indexes: user_id, source, category, date, action_required"