21 Commits

Author SHA1 Message Date
9643011e64 feat: MCP-Server für RAG-Retrieval + Webhook-Härtung
All checks were successful
CI / ci (push) Successful in 49s
Release / release (push) Successful in 1m2s
app/mcp_server.py: FastMCP (mcp SDK), streamable-http auf /mcp, statischer
Bearer-Token (constant-time ASGI-Middleware), Fail-Fast ohne RAG_MCP_TOKEN.
Tools rag_search (mit semester/fach/typ-Filter) + get_file_chunks. Läuft aus
demselben Image wie der Ingestor und reused den Embed-Pfad → Vektoren sind
garantiert kompatibel zum Ingest (der offizielle qdrant-MCP-Server kann nur
fastembed → Dimension-/Schema-Mismatch).

app/qdrant_store.py: search_chunks (query_points + optionaler Payload-Filter)
und get_chunks_by_path (scroll, nach chunk_index sortiert).

app/bulk.py: Amplification-Guard — /bulk-import lehnt mit 409 ab solange ein
vorheriger Bulk noch BackgroundTasks abarbeitet.

docker-compose.coolify.yml: rag-mcp-Service (nicht public, externes
metamcp-net statt Stack-Coupling) + Traefik-Rate-Limit-Middleware am ingestor.

tests/conftest.py: Settings-env_file in Tests neutralisieren (Dev-.env darf
die Suite nicht kontaminieren). 68 passed, ruff clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 22:08:37 +02:00
4b9280a972 test: ungenutzte imports entfernen (ruff F401)
All checks were successful
CI / ci (push) Successful in 37s
Release / release (push) Successful in 53s
2026-05-07 16:06:55 +02:00
a91150c41f chore: 502 bei propfind-fail, min_length path, exact-call assertion 2026-05-04 22:45:23 +02:00
8c50ab008c feat: bulk-import endpoint mit propfind walk 2026-05-04 22:42:21 +02:00
fab5569955 chore: imports hoisten und stricter background-task assertion 2026-05-04 22:40:22 +02:00
4792f0277f feat: fastapi app mit lifespan, webhook handler und /health 2026-05-04 22:37:23 +02:00
02c8f5d338 feat: pipeline-orchestrator fuer single-file ingest 2026-05-04 22:32:29 +02:00
e68e77a821 test: parametrize event-types und tighten validation-error assertion 2026-05-04 22:30:03 +02:00
81f6201cfc feat: webhook event-model und shared-secret auth 2026-05-04 22:28:10 +02:00
a861f4ec2b chore: docstrings und tighter upsert-test fuer qdrant store 2026-05-04 22:27:03 +02:00
7ebb63501e feat: qdrant store mit ensure/upsert/delete-by-path 2026-05-04 22:24:44 +02:00
afbd946e0a feat: ollama embedder mit exponential backoff retry 2026-05-04 22:20:52 +02:00
b5b46e41ad feat: webdav download via httpx mit basic-auth 2026-05-04 22:18:01 +02:00
ec55110ae4 feat: extractors fuer pdf/md/docx/xlsx mit dynamic fixtures 2026-05-04 22:14:59 +02:00
5e44495676 test: regression tests fuer overlap>=size und boundary ausserhalb lookback 2026-05-04 22:13:34 +02:00
2f2024f168 feat: word-based chunker mit sentence-boundary look-back 2026-05-04 22:11:14 +02:00
0224581587 refactor: klarere typ-extraktion, fullmatch, root-prefix-test 2026-05-04 22:09:41 +02:00
8d15f02187 feat: pfad-metadata-parser mit semester/fach/typ 2026-05-04 22:06:59 +02:00
a22b8e6fe7 refactor: lru_cache fuer get_settings, vollere field-coverage in tests 2026-05-04 22:02:50 +02:00
ce630ff1c7 feat: pydantic-settings config mit allen env-vars 2026-05-04 21:58:52 +02:00
db46a154c8 chore: project scaffolding mit uv und pyproject.toml 2026-05-04 21:54:17 +02:00