Skip to main content

Crawl OpenReview submissions and run embedding-based semantic search.

Project description

embed-papers

embed-papers crawls OpenReview submissions and runs semantic search with OpenAI embeddings.

This is a helper package for my agentic research workflow. Originally forked from gyj155/SearchPaperByEmbedding.

embed-papers supports two workflows:

  • For agents: a stable CLI contract (JSON stdout) that is safe to automate and parse.
  • For humans: a Streamlit viewer for interactive search, exploration, and positioning your work within a conference’s paper space.

Installation

Base package

pip install embed_papers

Set your API key for embeddings:

export OPENAI_API_KEY="<your-key>"

Viewer (extra dependency)

pip install "embed_papers[viewer]"

For Agents

CLI contract

  • stdout always prints one JSON object
  • stderr is reserved for logs/progress
  • non-zero exit codes still emit JSON on stdout

Success envelope:

{
  "ok": true,
  "schema_version": "1",
  "command": "search",
  "data": {}
}

Error envelope:

{
  "ok": false,
  "schema_version": "1",
  "command": "search",
  "error": {
    "type": "InvalidPapersFileError",
    "message": "..."
  }
}

CLI usage

Crawl

embed-papers crawl --venue-id "ICLR.cc/2026/Conference" --skip-if-exists

By default, crawl fails when zero papers are found (to catch wrong venue ids early).

Use --skip-if-exists to reuse an existing output file and skip calling OpenReview.

If --output-file is omitted, crawl defaults to:

  • ~/.cache/embed-papers/papers/<venue-id-slug>.json

Warm cache

export OPENAI_API_KEY="<your-key>"
embed-papers warm-cache \
  --papers-file iclr2026_papers.json \
  --venue-id "ICLR.cc/2026/Conference"

--papers-file is optional if --venue-id is provided. In that case, it defaults to ~/.cache/embed-papers/papers/<venue-id-slug>.json.

If --cache-dir is omitted, embeddings default to:

  • ~/.cache/embed-papers/embeddings

Search

embed-papers search \
  --papers-file iclr2026_papers.json \
  --venue-id "ICLR.cc/2026/Conference" \
  --query "foundation models for planning" \
  --top-k 20

--papers-file is optional if --venue-id is provided. In that case, it defaults to ~/.cache/embed-papers/papers/<venue-id-slug>.json.

search uses the same default embeddings cache dir (~/.cache/embed-papers/embeddings) unless --cache-dir is provided.

For Humans

Make sure you have set an OPENAI_API_KEY in your shell. In the command line, run:

embed-papers host

This launches a local Streamlit UI in your browser for interactive use.

Viewer flow:

  • enter conference abbreviation + year (auto-builds venue id)
  • choose direct query or examples upload
  • set top-k and run search
  • auto-crawl papers if missing
  • auto-build embeddings cache if missing

Cache directories used by viewer:

  • ~/.cache/embed-papers/papers
  • ~/.cache/embed-papers/embeddings
  • ~/.cache/embed-papers/atlas

Python API

1) Crawl conference papers

from embed_papers import crawl_papers

_ = crawl_papers(
    venue_id="ICLR.cc/2026/Conference",
    output_file="iclr2026_papers.json",
)

2) Warm cache / search

from embed_papers import PaperSearcher

searcher = PaperSearcher(
    papers_file="iclr2026_papers.json",
    venue_id="ICLR.cc/2026/Conference",
    model_name="text-embedding-3-large",
)

searcher.ensure_embeddings()
results = searcher.search(query="robotics planning language model", top_k=100)
searcher.display(results, n=10, show_abstract=True, abstract_max_chars=500)
searcher.save(results, "results.json")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

embed_papers-0.5.0.tar.gz (272.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

embed_papers-0.5.0-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file embed_papers-0.5.0.tar.gz.

File metadata

  • Download URL: embed_papers-0.5.0.tar.gz
  • Upload date:
  • Size: 272.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for embed_papers-0.5.0.tar.gz
Algorithm Hash digest
SHA256 6f68ddbb38fdeacac2b2cde5c1cc569f4d625e409a66dde4b4e4044f51bc3f53
MD5 fe9d46fa5c1c829c532439f1ee38ad1f
BLAKE2b-256 13e4ad9eee4e040aa8ed4a1c724bc8fffa41b0b3d64eb2625d16de6de6eee806

See more details on using hashes here.

Provenance

The following attestation bundles were made for embed_papers-0.5.0.tar.gz:

Publisher: release-wheel.yml on CodeBoyPhilo/Embed-Papers

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embed_papers-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: embed_papers-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for embed_papers-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6ca07b94db01b4609e97792fce77f7965b207da67701a45ed05a6b41914cba28
MD5 cd16490328035b1bf65a780cef3ee49c
BLAKE2b-256 834ca112cb50f0fb7702cbdb4ffa939d046aecdeb2f3cd9ac163721ce770e424

See more details on using hashes here.

Provenance

The following attestation bundles were made for embed_papers-0.5.0-py3-none-any.whl:

Publisher: release-wheel.yml on CodeBoyPhilo/Embed-Papers

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page