A semantic internal link generation API that analyzes draft text, extracts named entities using GLiNER, finds semantically similar articles via Qdrant vector search, and returns high-confidence internal linking recommendations with equity-aware re-ranking.
- Named Entity Extraction - Uses GLiNER to identify entities from draft text
- Semantic Search - Vector similarity search using embeddings
- Equity-Aware Ranking - Re-ranks recommendations to prioritize orphan pages
- Sitemap Ingestion - Crawl and index articles from any sitemap URL
- Graph Diagnostics - Logs orphan counts, top inbound URLs, and skipped sitemap targets for debugging link-graph quality
make installThis scaffolds .env, downloads Go modules, and installs npm packages.
Edit .env with your credentials (HF token, Qdrant URL, Redis URL, etc.).
make deploy-inferencePost deployment, add HF space URL to .env
make run # starts qdrant, backend (:8000), and frontend (:3000)
make stop # kill all servers + stop qdrantmake check # format + vet + lint + testmake build # Go binary at backend/serverFor the full command reference (coverage, benchmarks, eval tests, tidy, etc.), see AGENTS.md.
- Architecture Decisions: docs/design.md
- Deployment strategies: docs/deployment.md
- Full API usage, request examples, and response shapes: docs/api.md
- AI Evals: docs/design.md
| Variable | Description | Default |
|---|---|---|
MODELS_SPACE_URL |
HF Space for GLiNER + MiniLM inference | - |
HF_TOKEN |
Hugging Face access token | - |
QDRANT_API_KEY |
Optional Qdrant API key for hosted deployments | - |
QDRANT_URL |
Qdrant endpoint (HTTP for local, HTTPS for cloud) | http://localhost:6334 |
REDIS_URL |
Redis for job queue and link graph | - |
GROQ_API_KEY |
Groq LLM for precision eval | - |
DRY_RUN |
Skip HF Space calls, use fixtures | false |
DEBUG |
Enable debug mode | false |
RERANK_ALPHA |
Similarity weight for re-ranking | 0.7 |
MIT