Skip to content
Thisen-EkanayakePublic

About

Self-hosted research tracker. Builds a map of any research field (milestones, a reading path, open problems) and keeps a ranked, summarised feed of new papers. Runs on local models or any OpenAI-compatible API.

Topics

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

Athena

Athena

See how a research field grew, what is new in it, and what is still unsolved.

Athena collects AI papers and posts, ranks and summarises them, and builds research maps for any topic: the milestones, the reading order and the open problems, all on your own GPU or any OpenAI-compatible API.

CI CD License: MIT Last commit Conventional Commits

Python FastAPI Celery PostgreSQL Qdrant React TypeScript llama.cpp

Athena home page

Features

Research maps: type any topic and Athena builds its map from OpenAlex, Semantic Scholar and the papers' full text.

  • Lineage map: a topic's papers on a timeline. Select one to trace what it built on and what built on it.
  • Milestones and reading path: learn a field in 5 to 20 papers, survey first, with a note on why each one matters.
  • Open problems: limitations papers state about themselves or each other, grouped into themes marked persisting, new, fix claimed or quiet.
  • Ask a map: answers from the papers' full text, citing paper and section.
  • Check an idea: paste an idea or abstract to see the closest prior work, the gaps it touches and what would be new.
  • Kept up to date: maps refresh on a schedule, with a changelog, follows and an in-app inbox. Export to PNG, SVG, BibTeX, RIS, Markdown or CSV, or share a read-only link.

Feed and reading

  • Ingests ArXiv, Semantic Scholar, Papers With Code, RSS, Substack, LessWrong and scraped lab blogs.
  • Ranks items on citations, engagement, sentiment, recency and source authority, with a personal For you order learned from your reactions and saves.
  • Citation momentum (Rising fast), topic clusters, AI summaries and Q&A on any paper.
  • Reading lists, read marks, notes and highlights.

Search and writing

  • Hybrid search (Postgres full text + vectors) over your library, with live Semantic Scholar results.
  • Literature reviews grounded in a map or in search results; export reviews and reading lists.

Ready for a team

  • Accounts with admin and user roles; the admin creates accounts (no public sign-up).
  • Per-user daily limits, a monthly budget and token caps, with usage tracked per feature.
  • Runs fully local (Qwen3.5-9B + Qwen3-Embedding-8B on an 8 GB GPU), or point it at any OpenAI-compatible API from Settings.

Screenshots

Lineage map
Lineage map: a paper's thread, citations per year and milestone score
Reading path
Reading path: learn diffusion models in 10 papers
Open problems
Open problems: stated limitations grouped into themes
Idea check
Check an idea: closest prior work and what would be new
Feed with paper panel
Feed: ranked items, with summary, momentum, notes and Q&A
Search
Search: exact matches first, then by meaning

Quick start

Prerequisites: Docker, and for the AI features llama.cpp's llama-server with the two GGUF models in models/ (see config/llama-router.ini; about 7 GB of GPU memory). Any OpenAI-compatible API works instead.

cp .env.example .env

# Full stack in Docker (pre-built images from GHCR; --build to build locally, --down to stop)
./run_docker.sh

# Or native dev: infra in Docker, API / workers / frontend / model server on the host, with hot reload
pip install -r requirements.txt && playwright install chromium
./run_native.sh                # --stop to stop

Open http://localhost:5173 and create the admin account. There is no public sign-up: the admin adds people in Settings → Users. The API and its docs are at http://localhost:8000/docs.

With Docker, start the model server on the host (it needs the GPU); the containers reach it at host.docker.internal:8080:

llama-server --models-preset config/llama-router.ini --models-max 1 --port 8080

Configuration

Everything is set through environment variables (.env, read by athena/api/config.py). The important ones:

Variable Purpose
DATABASE_URL, REDIS_URL, QDRANT_URL Services; default to the Compose addresses
LLM_*, EMBED_* Chat and embedding endpoints (also editable in Settings → Models and keys)
SEMANTIC_SCHOLAR_API_KEY Optional; higher rate limits for maps, momentum and search
LIMIT_*_PER_DAY, MONTHLY_BUDGET_USD, USER_MONTHLY_TOKENS Per-user allowances and spending caps
DOCS_USERNAME, DOCS_PASSWORD Optional Basic Auth on /docs

See .env.example for the full list.

Architecture

Two Celery pipelines, one for the feed and one for the research maps, write to PostgreSQL and Qdrant. FastAPI serves both to the React app, and the workers and the API share one OpenAI-compatible model server.

Athena architecture: sources, the feed and research-map pipelines, storage, the API and the model server

Path What it holds
athena/scrapers/ Source collectors (ArXiv, RSS, Substack, Playwright, …)
athena/pipeline/ Celery workers: embedding, scoring, clustering, summaries, momentum
athena/evolution/ Research maps: topic search, citation graph, milestones, gaps, full text, reviews
athena/api/ FastAPI app, routers and auth
frontend/ React 19 + TypeScript + Vite (TanStack Query, Zustand, three.js)
docker/ Dockerfiles and Compose files; images publish to GHCR on push to main

Development

DATABASE_URL="sqlite:///test.db" pytest tests/test_scoring.py tests/test_preprocessing.py tests/test_connectors.py -v
flake8 . --max-line-length=120 --exclude=".venv,venv,frontend/node_modules"
cd frontend && npm run lint && npm run build

Contributing

Branch from main, use Conventional Commits, and open a PR against main; CI must pass. See CONTRIBUTING.md.

License

MIT © 2025 Thisen Ekanayake

About

Self-hosted research tracker. Builds a map of any research field (milestones, a reading path, open problems) and keeps a ranked, summarised feed of new papers. Runs on local models or any OpenAI-compatible API.

Topics

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Packages

Contributors

Languages