Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

oss-digest

Daily pull-request radar for inference-infra repos (FlashInfer, SGLang, vLLM, FlashMLA, …). A worker polls GitHub for newly opened and merged PRs, drops noise (docs/CI/typos) with a rule pass, tags the rest into categories — with a Together LLM when TOGETHER_API_KEY is set, rule heuristics otherwise — and a React UI shows a per-day digest.

Same architectural shape as eval-api / eval.together-turbo.com so it can be productionized the same way: Caddy serves the static Vite bundle and proxies /v1/*, /admin/*, /health same-origin to FastAPI; a worker runs alongside; storage is a thin DAO (api/app/store.py) over SQLite that swaps to Mongo/DocumentDB by reimplementing one module.

Layout

  • api/app/config.py — watched repos, categories, env settings
  • api/app/github.py — pulls API client (newest-first, stops at cutoff)
  • api/app/rules.py — high-precision noise drop + category hints
  • api/app/llm.py — batched Together chat-completions classification
  • api/app/pipeline.py — fetch → rules → LLM → upsert, incremental per-repo sync
  • api/app/main.py — FastAPI: /v1/prs, /v1/digest, /admin/v1/ingest
  • api/app/worker.py--once or polling loop (DIGEST_POLL_INTERVAL_HOURS)
  • web/ — Vite + React + TS + Tailwind + React Query SPA (Digest / Browse views)
  • deploy/Caddyfile, docker-compose.yml — prod-shaped local stack

Run (dev mode, no docker)

make setup            # npm install
make ingest           # one-shot sync (LOOKBACK=7 to widen)
make api              # FastAPI :8123
make web              # Vite :5173, proxies /v1 -> :8123

Run (compose, prod-shaped)

make up               # builds web/dist, then caddy :8080 -> api + worker
make down

Config

Copy .env.example to .env (compose reads it automatically). Without GITHUB_TOKEN, local dev falls back to gh auth token; without TOGETHER_API_KEY, classification is rules-only (no summaries, coarser tags). Re-tagging after enabling the LLM: make ingest LOOKBACK=3 reclassifies the window (existing rule-tagged rows are overwritten by the LLM verdicts only for PRs still inside it).

Productionizing

  1. EC2 box (or any host) with Docker: docker compose up -d as-is; change deploy/Caddyfile :80 to the real domain for automatic TLS.
  2. Point DNS at the host; done — this is the eval-api pattern.
  3. Scale-up path: swap store.py to Mongo/DocumentDB, move the SQLite volume to the DB, add worker replicas if repo count grows.

About

Daily PR digest for inference-infra OSS repos (flashinfer, sglang, vllm, FlashMLA)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages