2 KiB
2 KiB
extractors
Consolidated lightweight feature-extraction service for the DiDi AI platform (LOT 1, Modul 2 — Extractoare ML). Hosts the CPU-only / LLM-delegating feature extractors that do not warrant a dedicated GPU model server.
Heavy model services stay separate: deepfake/BusterX →
video-analysis, speech-to-text/Whisper →audio. They require GPU at runtime and are not folded in here.
Capabilities
| Endpoint | Status | Type | Notes |
|---|---|---|---|
POST /v1/metadata |
✅ implemented | CPU, deterministic | EXIF, video metadata (ffprobe), spectrogram, ELA, integrity/signature |
POST /v1/sentiment |
✅ implemented | LLM-delegated | LLM gateway + Romanian-aware prompt (irony/sarcasm) |
POST /v1/ocr |
✅ implemented | LLM vision | verbatim text from images via the vision model |
POST /v1/ner |
✅ implemented | model (.[ml]) |
GLiNER multilingual, configurable entity types, GPU-capable |
POST /v1/detect |
✅ implemented | model (.[ml]) |
YOLO object detection (COCO), boxes+conf, GPU-capable |
The metadata extractors are selected automatically from the detected media type (image / video / audio).
Prerequisites
- Python 3.10+
- ffmpeg/ffprobe on PATH (provided by the container image) — required for video metadata and non-WAV audio decoding. Image extractors (EXIF/ELA/ integrity) work without it.
Run (local)
uv sync
uv run uvicorn extractors.app:app --port 54400
Test
uv run pytest # local (needs deps)
./deploy/deploy.sh test # or build the wheel in Docker
In the container image, ffmpeg-dependent paths run for real; the unit tests are fixture-driven so they pass without the binaries.
Deploy
cp .env.example .env # set EXTRACTORS_TAG / PORT / MAX_UPLOAD_MB
./deploy/deploy.sh up
Ports follow the datacenter convention: 54400 (dev), 14400 (prod).
See API.md for the full request/response contract.