75 lines
3.5 KiB
YAML
75 lines
3.5 KiB
YAML
# Personal settings go in user/config.yaml, which is merged over this file
|
|
# (nested keys override, lists replace). See data/examples/config.yaml.
|
|
contact:
|
|
email: null # sent to arXiv and Crossref (polite pool); set in user/config.yaml
|
|
|
|
llm:
|
|
model: art-researcher # built from the Modelfile by art/llm.py
|
|
modelfile: modelfiles/researcher.Modelfile
|
|
num_ctx: 8192 # set on every call; Ollama's default silently truncates longer prompts
|
|
think: false # gemma4 supports thinking; recorded on every call
|
|
enforce_schema: true # structured calls pass the JSON schema as Ollama's `format`
|
|
retries: 1 # extra attempts for a structured call that fails validation
|
|
timeout_s: 300
|
|
# Per-task options, sent explicitly on every call. Low temperature makes a
|
|
# small model's summaries formulaic; labels stay low so they group.
|
|
tasks:
|
|
summarize: {temperature: 0.7}
|
|
label: {temperature: 0.2}
|
|
explain: {temperature: 0.3}
|
|
llm_score: {temperature: 0.0}
|
|
profile_draft: {temperature: 0.3} # bingham init; drafts for a person to edit
|
|
max_results_per_feed: 30 # arXiv API backfill only
|
|
feed_cache_ttl_hours: 6 # skip network fetch if raw feed data is fresher than this
|
|
|
|
digest:
|
|
# Field-pulse labels whose bge embeddings average at least this cosine
|
|
# similarity are grouped. Set 2026-09-28 from the first week: unrelated
|
|
# labels median 0.52; same-topic pairs 0.8 and above.
|
|
label_cluster_threshold: 0.8
|
|
# "Just below threshold": per profile, up to near_misses papers scoring
|
|
# between near_miss_floor x threshold and the threshold.
|
|
near_misses: 3
|
|
near_miss_floor: 0.5
|
|
|
|
eval:
|
|
target_recall: 0.9 # bingham eval suggests the highest threshold that keeps this recall
|
|
|
|
paths: # relative to the repository root
|
|
db: data/art.sqlite
|
|
digests: digests
|
|
models: models # HuggingFace cache (HF_HUB_CACHE)
|
|
|
|
arxiv:
|
|
# Daily run reads rss.arxiv.org/rss/<category>. Every paper is screened
|
|
# against every profile in data/profiles.yaml, whatever its category.
|
|
# Override the list in user/config.yaml to follow other categories.
|
|
categories:
|
|
- cond-mat.soft
|
|
- physics.flu-dyn
|
|
include_cross_lists: true # papers whose primary category is elsewhere
|
|
include_replacements: false # new versions of already-announced papers
|
|
request_delay_s: 3 # between requests to any arXiv endpoint
|
|
max_catchup_days: 14 # longer gaps in daily runs are filled as backfill
|
|
|
|
jor:
|
|
issn: [0148-6055, 1520-8516] # print, online; Crossref filter
|
|
backfill_from: 2025-01-01 # first-run reach for the J. Rheol. stream
|
|
crossref_overlap_days: 7 # re-query this far before the last fetch
|
|
|
|
screen:
|
|
embed_model: BAAI/bge-large-en-v1.5
|
|
rerank_model: BAAI/bge-reranker-v2-m3
|
|
max_embed_tokens: 512 # bge-large limit; longer abstracts are truncated and logged
|
|
rerank_max_length: 1024 # tokens for a (profile description, paper) pair
|
|
# Candidates per profile from each retriever (cosine, BM25): the larger of
|
|
# top_k and top_frac of the batch. The union goes to the re-ranker.
|
|
top_k: 30
|
|
top_frac: 0.2
|
|
# Re-ranker score (0-1) above which a paper is highlighted. Broad profile
|
|
# descriptions score relevant papers lower, so set per-profile values in
|
|
# user/config.yaml (keyed by profile id) once you have looked at the first
|
|
# screen. The digest applies the current values; no re-screen is needed.
|
|
thresholds:
|
|
default: 0.2
|
|
calibrated: null # date of the last calibration
|