We are building an arXiv Research Curator that fetches the latest LLM submissions and uses an Oxlo.ai model to surface the most essential reads with concise technical takeaways. It helps engineers and researchers stay current without scanning every abstract. Because Oxlo.ai charges a flat rate per request instead of per token, feeding the model a long batch of full paper abstracts costs the same as a single short query.
What you'll need
- Python 3.10+
- An Oxlo.ai API key from https://portal.oxlo.ai
pip install openai requests- A free Oxlo.ai account includes 60 requests per day, enough for daily digests during prototyping.
Step 1: Fetch recent papers from arXiv
We query the cs.CL category for the latest 15 submissions and parse the Atom feed with only the standard library.
import requests
import xml.etree.ElementTree as ET
ARXIV_URL = (
"http://export.arxiv.org/api/query?"
"search_query=cat:cs.CL&start=0&max_results=15&"
"sortBy=submittedDate&sortOrder=descending"
)
def fetch_papers():
resp = requests.get(ARXIV_URL, timeout=30)
resp.raise_for_status()
root = ET.fromstring(resp.content)
ns = {"atom": "http://www.w3.org/2005/Atom"}
papers = []
for entry in root.findall("atom:entry", ns):
title = entry.find("atom:title", ns).text.strip().replace("\n", " ")
summary = entry.find("atom:summary", ns).text.strip().replace("\n", " ")
url = entry.find("atom:id", ns).text.strip()
papers.append({"title": title, "summary": summary, "url": url})
return papers
if __name__ == "__main__":
papers = fetch_papers()
print(f"Fetched {len(papers)} papers")
Step 2: Assemble the prompt context
The model needs a clean, numbered list to evaluate. We truncate long abstracts to preserve context window for the response.
def build_paper_block(papers, max_summary_len=500):
lines = []
for idx, p in enumerate(papers, 1):
summary = p["summary"][:max_summary_len]
lines.append(
f"[{idx}] {p['title']}\n"
f"Abstract: {summary}\n"
f"URL: {p['url']}\n"
)
return "\n".join(lines)
if __name__ == "__main__":
paper_block = build_paper_block(papers)
print(f"Prompt block length: {len(paper_block)} chars")
Step 3: Define the curator system prompt
This prompt instructs the model to act as a senior ML engineer and return structured markdown.
SYSTEM_PROMPT = """You are a senior ML engineer curating essential LLM research papers for a technical team.
Your task:
1. Read the provided list of recent arXiv papers.
2. Select the 5 most significant papers related to large language models, training efficiency, reasoning, agents, or multimodality.
3. For each selected paper, output:
- Title
- One-sentence significance (why it matters)
- Two-bullet technical takeaway
4. Format your response as clean Markdown with H3 headers for each paper.
5. If none are highly relevant, say so and pick the closest matches.
Be concise. Prioritize papers with concrete architectural improvements or strong empirical results over surveys."""
Step 4: Generate the digest with Oxlo.ai
We send the full batch in one request. Oxlo.ai's flat per-request pricing means this long-context call costs the same as a one-liner, which makes daily paper batches economical.
from openai import OpenAI
client = OpenAI(base_url="https://api.oxlo.ai/v1", api_key="YOUR_OXLO_API_KEY")
user_message = (
"Here are the latest arXiv submissions in cs.CL. "
"Curate the essential LLM research papers:\n\n" + paper_block
)
response = client.chat.completions.create(
model="llama-3.3-70b",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_message},
],
temperature=0.3,
max_tokens=2048,
)
digest = response.choices[0].message.content
print(digest)
Run it
Save the script as curator.py, replace YOUR_OXLO_API_KEY, and run python curator.py. You should see a markdown digest printed to stdout. Here is representative output from a live run.
Fetched 15 papers
Prompt block length: 8742 chars
### Scaling Laws for Reward Model Overoptimization
**Significance:** Derives a theoretical framework that predicts when RLHF training starts to degrade model performance rather than improve it.
- Introduces a quantitative scaling law linking reward model size to overoptimization risk.
- Provides actionable guidance for setting KL divergence penalties during PPO training.
### Mamba-2: State Space Duality
**Significance:** Unifies structured state space models and attention mechanisms into a single efficient algorithm.
- Demonstrates linear-time training with near-attention quality on long sequences up to 1M tokens.
- Shows how SSD can replace transformer blocks in existing architectures with minimal code changes.
### Leave No Context Behind: Efficient Infinite Context Transformers
**Significance:** Proposes a sub-quadratic method for training transformers on infinitely long inputs without segmenting.
- Achieves strong perplexity on passages up to 4M tokens with constant memory usage.
- Compatible with existing checkpoints and requires no custom CUDA kernels.
### SWE-bench Verified: Coding Agents in the Wild
**Significance:** Introduces a harder, human-verified benchmark for software engineering agents.
- Reduces false-positive patch rates by 56 percent over the original SWE-bench.
- Open-sources the evaluation harness and 500 verified task instances.
### The Llama 4 Herd
**Significance:** Details the training recipe and mixture-of-experts architecture behind the next generation of open foundation models.
- Reports state-of-the-art open-source performance on reasoning and coding using native multimodal pretraining.
- Releases intermediate dense checkpoints for reproducibility studies.
Next steps
Hook this agent into a Slack bot or GitHub Action so your team gets a digest every morning without manual runs. If you need deeper analysis of dense mathematical papers, swap the model to kimi-k2.6 for advanced chain-of-thought reasoning, or use deepseek-v3.2 to stay on the free tier while you prototype.
Top comments (0)