Update Conferences
Cost-aware workflow for refreshing src/data/conferences/*.yml via agents/modal_agent.py on Modal. Prefer a short priority list over --all-conferences.
When to use
- User asks to update conference deadlines / run the Modal agent
- User wants conferences “likely to have new data”
- Full-repo runs look too expensive (~$2–4 per conference)
Selection rules (high ROI only)
Rank by actionable now, not “missing next year.”
Run when:
- Active cycle: a deadline or milestone falls in the next ~8 weeks
- A milestone just passed and remaining dates may have changed (
venue: TBA, wrong camera-ready, missing rebuttal/notification) - YAML is incomplete for a conference already in flight (e.g. empty
deadlines: []while CFP is open)
Skip when:
- Far-future CFPs (e.g. CVPR/ICLR 2027 months before CFP typically opens)
- Conference was just successfully updated in a recent run
- Archival gaps only (missing old years) with no imminent news
- Complete past/current year data with no near-term milestones
Do not treat “no year: N+1 block yet” as sufficient reason to run.
How to build the list
- Scan
src/data/conferences/*.ymlfor signals:deadlines: [],venue: TBA,to be announced, near-termdate:values, missing fields on an active year. - Cross-check typical CFP timing only as a soft prior — YAML + calendar proximity win.
- Present a short ranked table (conference stem, why now). Aim for ~10–15, not all ~67.
- Confirm with the user before launching runs.
Running the agent
Default runner: Modal (agents/modal_agent.py). Pushes to huggingface/ai-deadlines main.
# Prefer one conference at a time
uv run modal run --detach agents/modal_agent.py --conference-name <stem>
# Small smoke test only
uv run modal run --detach agents/modal_agent.py --limit 1
# Avoid unless explicitly requested (expensive)
uv run modal run --detach agents/modal_agent.py --all-conferences
There is no --conferences a,b,c flag — run sequentially with --conference-name, waiting for each to finish (or getting user OK) before the next.
Preflight
- Check for already-running apps:
uv run modal app list - Stop stale/stuck runs before starting a new one if the user wants a clean test
- Required Modal secrets:
anthropic,github-token(GH_TOKENwithrepo),exa anthropicis HF Inference Providers config (not a raw Anthropic key). Do not replace it with a barehuggingfacesecret that only hasHF_TOKEN.
Monitor and report
After each run, report briefly:
- Modal app URL / app id
- Status:
pushed|no_changes|error|timeout commit_shawhen status ispushed- Cost and approx duration if available
- Concrete YAML changes (or that push was skipped)
- Whether any retrieval agent hit
error_max_turns/ budget limits / wall-clock timeout
Watch logs for: Result:, pushed, no_changes, timeout, commit_sha, Total pipeline, Limit reached, Wall-clock timeout, Authentication failed.
Data conventions
- Deadline timezone: always
AoE. Never writeUTC-12orUTC+12. - Conference stem = YAML filename without
.yml(e.g.emnlp,wacv,3dv) - Leave past conference years unchanged unless the user asks for archival fixes
- YAML is validated in Python before push (parse, required fields,
AoE, past years byte-for-byte). Failures returnerrorand do not push.
Timeouts
- Per-conference Modal function timeout: 3600s, overridable at deploy with
MODAL_CONFERENCE_TIMEOUT - Per retrieval/aggregation agent wall-clock: 300s (
AGENT_WALL_CLOCK_SECONDS) - Retrieval agents fail closed: last-turn hook asks for structured output; empty
error_max_turnsgets one no-tools follow-up. Do not treat a hang until the function cap asno_changes.
Cost intuition
- Typical single-conference run: ~$2–4 and ~5–15 minutes
- Prefer confirming the next conference with the user after each successful run when iterating a priority list
no_changesis a success (agents verified; push skipped)
Troubleshooting
| Symptom | Action |
|---|---|
| 401 / wrong Claude model id | Refresh Modal anthropic secret (HF router + model env vars); do not switch the app to the plain huggingface secret |
GH_TOKEN / push failed |
User must refresh Modal github-token; do not invent tokens from guesses |
| Hang / no log progress | Check Modal dashboard; local stream can stall while cloud work continues |
| Agents burn all turns | Note it; last-turn hook should force structured requires_update: false. Pipeline can still succeed if ≥1 retrieval agent returns structured output |
Status timeout |
Per-agent 5 min cap or Modal 3600s function timeout; not the same as no_changes |
Local alternative
Only if the user asks to run locally instead of Modal:
uv run --env-file keys.env -m agents.agent --conference_name <stem>
For HF Jobs debugging, see agents/README.md / agents/hf_jobs_agent.py — not the default path.