8cebb4f4e9
- unified_search: Hybride Suche (PostgreSQL FTS + pgvector + RRF Fusion) - 5 Search Providers (Contact, Company, Mail, File, Event) - KI Query Understanding (Fuzzy, Facetten via LiteLLM) - DMS Text-Extraction (PDF, DOCX, XLSX, PPTX) - Embedding Pipeline (ollama/nomic-embed-text, 768 Dim) - Background Jobs für Indexierung - Plugin-basierte Provider Registry - ai_proactive: Proaktiver KI-Agent - Context-Tracking (Frontend → Backend → Event Bus) - Proactive Engine mit LLM Suggestion-Generierung - SSE Real-time Push an Frontend - 6 AI Tools für Tool Registry - Rate-Limiting + User Settings - Deep Analysis Background Jobs - Frontend Integration: - useAIContext Hook, SuggestionSidebar, SuggestionBadge - ProactiveAISettings Page, Search API Client - Globale Suche auf neue API umgestellt - Tests: test_unified_search.py + test_ai_proactive.py (alle bestanden) - Config: Ollama Cloud DeepSeek V4 als Default, konfigurierbar - Dependencies: PyMuPDF, python-docx, python-pptx, pgvector - Bugfixes: notification type_key length, migration IF NOT EXISTS
51 lines
2.1 KiB
SQL
51 lines
2.1 KiB
SQL
-- ai_proactive plugin: suggestions, context log, user settings
|
|
|
|
-- Suggestions Store
|
|
CREATE TABLE IF NOT EXISTS ai_proactive_suggestions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL,
|
|
user_id UUID NOT NULL,
|
|
entity_type VARCHAR(50) NOT NULL,
|
|
entity_id UUID,
|
|
suggestion_type VARCHAR(50) NOT NULL DEFAULT 'info', -- info, warning, action, insight
|
|
title VARCHAR(200) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
confidence FLOAT NOT NULL DEFAULT 0.5,
|
|
actions JSONB NOT NULL DEFAULT '[]', -- [{method, path, body, description}]
|
|
is_dismissed BOOLEAN NOT NULL DEFAULT FALSE,
|
|
is_acted_upon BOOLEAN NOT NULL DEFAULT FALSE,
|
|
context_snapshot JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
expires_at TIMESTAMPTZ
|
|
);
|
|
CREATE INDEX IF NOT EXISTS ix_suggestions_user ON ai_proactive_suggestions (tenant_id, user_id, is_dismissed, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS ix_suggestions_entity ON ai_proactive_suggestions (tenant_id, entity_type, entity_id);
|
|
|
|
-- Context Log (was der User wann angesehen hat)
|
|
CREATE TABLE IF NOT EXISTS ai_proactive_context_log (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL,
|
|
user_id UUID NOT NULL,
|
|
page VARCHAR(200) NOT NULL,
|
|
entity_type VARCHAR(50),
|
|
entity_id UUID,
|
|
entity_data JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS ix_context_log_user_time ON ai_proactive_context_log (tenant_id, user_id, created_at DESC);
|
|
|
|
-- User Settings für proactive AI
|
|
CREATE TABLE IF NOT EXISTS ai_proactive_settings (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL,
|
|
user_id UUID NOT NULL,
|
|
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
suggestion_categories JSONB NOT NULL DEFAULT '["mail","tasks","contacts","companies","insights"]',
|
|
confidence_threshold FLOAT NOT NULL DEFAULT 0.5,
|
|
rate_limit_seconds INT NOT NULL DEFAULT 10,
|
|
model VARCHAR(100) NOT NULL DEFAULT 'gpt-4o-mini',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE(tenant_id, user_id)
|
|
);
|