togethercomputer/oss-digest
Python
Captured source
source ↗togethercomputer/oss-digest
Description: Daily PR digest for inference-infra OSS repos (flashinfer, sglang, vllm, FlashMLA)
Language: Python
Stars: 0
Forks: 0
Open issues: 1
Created: 2026-08-07T23:14:51Z
Pushed: 2026-08-07T23:20:26Z
Default branch: main
Fork: no
Archived: no
README:
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 settingsapi/app/github.py— pulls API client (newest-first, stops at cutoff)api/app/rules.py— high-precision noise drop + category hintsapi/app/llm.py— batched Together chat-completions classificationapi/app/pipeline.py— fetch → rules → LLM → upsert, incremental per-repo syncapi/app/main.py— FastAPI:/v1/prs,/v1/digest,/admin/v1/ingestapi/app/worker.py—--onceor 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.
Notability
notability 3.0/10Routine new repo, no traction data.