kimtth/fetch-llm-papers
Workflow for updating the LLM landscape paper pool (section/x_llm_papers.md) using fetch_llm_papers.py. Covers full re-fetch, resume from checkpoint, and adding new topics. USE FOR: Refreshing citation counts, expanding topic coverage. DO NOT USE FOR: Adding hand-curated entries to section files (use add-new-entry-from-temp-md), updating RAG/Agent citation sections in best_practices.md (use update-cite-count).
npx skills add https://github.com/kimtth/azure-openai-llm-wiki --skill fetch-llm-papers
The pool file section/x_llm_papers.md is a compact list of high-citation CS papers covering the LLM landscape, fetched from the Semantic Scholar API and ranked by citation count. It includes a topic coverage summary and per-paper topic tags. It is generated and maintained by code/fetch_llm_papers.py.
The section ### LLM Research (Ranked by cite count >=150) in section/models_research.md links to this file with a single descriptive line.
Script: code/fetch_llm_papers.py
Python env: .venv\Scripts\python.exe
| Argument | Default | Purpose |
|----------|---------|---------|
| --output | section/x_llm_papers.md | Output markdown file for the paper pool |
| --min-citations | 150 | Minimum citation count filter |
| --top-n | 50 | Max papers returned per topic query |
| --request-delay | 2.0 | Delay between Semantic Scholar requests |
| --jitter | 0.5 | Random extra delay between requests |
| --api-key-env | S2_API_KEY | Env var containing a Semantic Scholar API key |
| --reset | *(flag)* | Delete existing checkpoint and start from scratch |
| --topics | *(all)* | Limit run to matching topic names (substring, case-insensitive) |
| --refresh-existing | *(flag)* | Refresh existing papers with the Semantic Scholar batch API, without search queries |
| --batch-size | 100 | Paper IDs per --refresh-existing batch |
| --annotate-existing | *(flag)* | Rewrite the existing markdown with inferred topic tags without API calls |
| --annotate-source | *(output file)* | Optional source for annotation; supports git:<rev>:<path> |
Use this for the fastest routine update when the current topic coverage is still appropriate.
.venv\Scripts\python.exe code/fetch_llm_papers.py `
--refresh-existing `
--min-citations 150 `
--batch-size 100
--batch-size if unauthenticated requests are rate-limited.Use when topics have been added/modified or citation counts are stale.
.venv\Scripts\python.exe code/fetch_llm_papers.py `
--reset `
--min-citations 150 `
--top-n 50 `
--request-delay 2.0 `
--jitter 0.5
--reset deletes any existing checkpoint so all 41 topics are re-queried.section/x_llm_papers.md is rewritten with topic coverage, topic tags, and sequential numbering sorted by citation count.$env:S2_API_KEY before running. The script sends it as the x-api-key header.The script saves a checkpoint (section/x_llm_papers.checkpoint.json) after each successful query and after each completed topic. If the run is interrupted by a rate-limit (HTTP 429), simply re-run without --reset:
.venv\Scripts\python.exe code/fetch_llm_papers.py `
--min-citations 150 `
--top-n 50
The script prints [resume] Loaded N papers, M completed topics, Q cached queries from checkpoint. and skips already-finished topics. Query-level cache entries prevent successful queries from being reissued during resume.
If a query fails after retries, the script writes partial progress, keeps the current topic incomplete, and exits with a [pause] message. Re-run later without --reset.
Use this when the paper pool already exists and you only need topic coverage or tag extraction refreshed:
.venv\Scripts\python.exe code/fetch_llm_papers.py `
--annotate-existing `
--min-citations 150
To rebuild annotations from the committed version of the file, useful after a partial write or parser change:
.venv\Scripts\python.exe code/fetch_llm_papers.py `
--annotate-existing `
--annotate-source git:HEAD:section/x_llm_papers.md `
--min-citations 150
.venv\Scripts\python.exe code/fetch_llm_papers.py `
--topics "PEFT" "Reasoning" `
--min-citations 150 `
--top-n 50
Matches topic names by substring (case-insensitive). New papers for matched topics are merged into the existing pool if a checkpoint exists; otherwise starts fresh for those topics only.
Topics are defined in the TOPICS dict at the top of fetch_llm_papers.py. Each key is a topic label; the value is a list of Semantic Scholar search query strings.
Rules:
paperId.--reset to re-fetch from scratch (checkpoint is stale once TOPICS changes).Current topic areas (41 total):
| Category | Topics |
|----------|--------|
| Core LLM | Reasoning in LLMs, LLM Overview & History, Scaling Laws, LLM Architecture Innovations |
| Training | Alignment & RLHF, RLAIF & Constitutional AI, RLVR & Process Reward Models, Instruction Tuning & SFT, PEFT & LoRA, Self-Supervised & Representation Learning |
| Inference | Efficient LLMs: Training & Inference, Inference-Time Scaling & Test-Time Compute, LLMOps & Model Serving |
| Applications | LLM Agents, Retrieval-Augmented Generation (RAG), GraphRAG & Knowledge Graphs, LLMs for Code, LLMs for Healthcare & Science, LLM for Robotics & Embodied AI, Function Calling & Tool Use, GUI Agents, Tabular Data & NL2SQL |
| Multimodal | Multimodal LLMs, Multilingual & Low-Resource LLMs, Speech & Audio Language Models, Small Language Models, Mixture of Experts |
| Evaluation | Evaluation of LLMs & Agents, Hallucination in LLMs, Trustworthy & Secure LLMs |
| Generation | Structured Generation & Constrained Decoding |
| Other | Prompt Engineering & In-Context Learning, Context Engineering, LLM Memory & Personalization, Embeddings & Vector Search, Data for LLMs, LLM Governance, Privacy & Copyright, Interpretability & Mechanistic Understanding, AIOps & Observability, Federated & Personalized AI, Continual Learning & Model Merging |
Each entry in section/x_llm_papers.md:
N. [Title📑](https://arxiv.org/abs/XXXX.XXXXX): First sentence of abstract. [Mon YYYY] (Citations: N,NNN; Topics: Topic A, Topic B)
## Topic Coverage, a count of inferred topic tags across all papers.1., 2., ...) by citation count descending.2305.xxxxx → [May 2023]).fieldsOfStudy containing "Computer Science" are included.--annotate-existing.section/x_llm_papers.checkpoint.json — JSON with these keys:
{
"completed_topics": ["Reasoning in LLMs", "LLM Agents", ...],
"failed_queries": ["..."],
"query_cache": { "normalized query": [ ... ] },
"papers": [ { "paperId": "...", "title": "...", "citationCount": 123, ... } ]
}
--reset.python -c "import json; cp=json.load(open('section/x_llm_papers.checkpoint.json', encoding='utf-8')); print(len(cp['papers']), 'papers,', len(cp['completed_topics']), 'topics done,', len(cp.get('query_cache', {})), 'cached queries')"--reset: The checkpoint from a previous run skips topics that already completed. After editing TOPICS, always use --reset to re-fetch all topics.--reset). Increase --request-delay or --backoff to slow down further.completed_topics after a 429 or timeout. The script intentionally leaves incomplete topics out of completed_topics so resume can retry only the missing query work."Computer Science" in fieldsOfStudy and a topic/core LLM relevance match. Some highly cited ML papers may be excluded if they drift too far from the LLM landscape. This is intentional.Take kimtth/fetch-llm-papers from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.