SPB Git

spb/ai-atlas

Public
History of src/aiatlas/services Clear filter
page 1
  1. Sat, Sep 12, 2026 7

    1. API 1.1 (Stream C): canonical model universe, comparability-grouped leaderboards, deployments & cost, intelligence surfaces, admin workbenches
      …
      Existing routes (additive, v1 shapes kept): /models canonical universe + include=artifacts, family_id join, canonical licence
      matching, families/licenses/trust facets, /models/{slug} accepts artifacts and reports redirected_from; EntityDetail adds family,
      artifacts, deployments, identity, licence, openness, version_history, grouped benchmarks and runs in <= 4 connection groups; /stats
      adds organizations_total, artifacts, model_families, change_events_live_24h and counter definitions; /changes, /changes/daily
      ("Today in AI 2.0" with group_key folding), /timeline, entity timelines and /diff default to is_backfill=false on occurred_at
      (include_backfill, date_field restore v1); /benchmarks exposes family/variant/metric/direction/groups/trust_mix and resolves aliases;
      /compare groups benchmark dimensions by (benchmark, metric, config_key) with comparability, diff_only and mode; /prices adds
      family/org/modality filters and sort=cheapest_frontier; /prices/index becomes the AI Price Index; /providers adds distributions,
      30-day churn, organizations_covered, features_supported; /search compiler v2 (compiled/sort/residual/unrecognised, org verified
      against aliases, guarded casts, FTS fallback when pgvector is absent); /methodology, /trending?kind=.
      
      New routes: /benchmarks/{slug}/leaderboard, /benchmarks/{slug}/frontier, /benchmarks/matrix, /models/{a}/diff/{b}, /deployments,
      /cost, /cost/context, /frontier, /pareto, /pulse, /open, /find-a-model, /run-locally, /hardware/{slug}/fit, /families,
      /families/{slug}, /graph/explore, /time-machine, /claims/{id}, /entities/{slug}/claims, /entities/{slug}/provenance/{property},
      /licenses, /licenses/{key}; admin: /admin/quality, /admin/entity-resolution (GET + POST decisions via merge_entities mode= when
      available), /admin/anomalies, /admin/extractions/{snapshot_id}, /admin/quarantine (501 until services.canonical ships),
      /admin/audit, /admin/runs/{run_id}/rollback, /admin/cache/flush?after_run=1.
      
      Services: frontier.py (comparability groups, one-row-per-model leaderboards, frontier model set, leader_at), finder.py, pareto.py,
      cost.py, hardware_fit.py (architecture-aware KV cache, observed artifact sizes, multi-GPU), search.py v2, stats.py definitions.
      
      Security/perf: rate_limit("admin") before require_admin, failed-auth limiter 10/min/IP, x-forwarded-for only with AIA_TRUST_PROXY,
      set_limit GUC leak removed, weak ETag + Cache-Control + 304 on public GETs, admin audit log on every admin call. EXPLAIN ANALYZE on the
      production copy: every read path < 20 ms, no index migration needed.
      
      Docs: docs/API.md rewritten as the 1.1 contract (changelog, 1.1 additions, semantics changes, deprecations: none).
      Tests: tests/test_api_v11.py (contract) and tests/test_api_services.py (pareto, cost, compiler, hardware fit); 44 API tests pass.
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 7 files +1,189 −77
    2. aia canonicalize: duplicates → variants → artifacts → families → licences → taxonomy → results → events → anomalies (dry-run by default, idempotent --apply); aia anomalies; aia quarantine list|release|discard
      …
      Every step plans from reads and reports counts + examples; --apply executes the plan through merge_entities / upsert_relation / a tier-2
      derived FactWriter. No deletes, snapshots untouched, a second --apply is a no-op. Optional entity scope for targeted runs and tests.
      docs/CANONICALIZATION.md documents every rule, what is never done, counting rules and how to re-run.
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +836
    3. SDK hardening: SSRF guard with per-hop redirect validation, run_id on every fact, same-source loophole closed, taxonomy at write time, result comparability, event semantics, hierarchy hints, quarantine
      …
      - fetch: validate_destination() on every request and redirect hop (max 5, manual loop): non-http(s), localhost/.local/.internal, RFC1918,
        loopback, link-local (metadata), CGNAT, IPv6 loopback/link-local/ULA, unspecified → FetchError("blocked destination")
      - facts: facts_to_json / facts_from_json (tagged datetimes) for quarantined runs
      - writer: run_id/source_key/is_first_run; a claim supersedes only when tier <= current or same source AND same extractor (LLM never
        overwrites deterministic from the same URL); licence/openness/modalities/status/kind/org_kind normalised via the ontology with value_raw
        + taxonomy_mappings, same assertion in another spelling re-encoded in place (no event); license_key claim; results get config_key,
        trust_level, variant, run_group, extractor, effort config for variant refs, one current row per (model, benchmark, metric, config_key),
        out-of-range scores → confidence low + anomaly; events get recorded_at, is_backfill (classify_backfill), group_key, deterministic
        importance; family/canonical hints materialised (family_id, canonical_id, artifact_kind, member_of_family, artifact_of); NEW_ARTIFACT 0,
        NEW_MODEL_FAMILY 1; conflicting claims recorded once; derived writers never open review items and mark their events backfill
      - resolver: model/artifact compatible lookups; keep_separate decisions honoured; digit-collapsing aliases require the same variant_key;
        first_seen_hint → first_seen_at = min(now, hint); resolve_variant() folds evaluator-only effort variants onto the canonical model
      - connector: run_id/source_key/first-run flag into the writer; --url reprocess rebuilds Targets from documents.meta._target (key, doc_type,
        meta, needs_llm, entity persisted at first fetch); quarantine for tier ≥ 2 connectors (rolling median baseline of the last 5 full runs:
        new entities > max(50, 1.3×), prices > 3×, entities < 0.8× / results < 0.5× on full extraction) → quarantined_runs + review item, nothing written
      - services/events: classify_backfill, group_key_for, importance_for · services/anomalies: record / run_checks / list_anomalies
      - merge: modes merge|alias|variant|family_member, keep_separate refusal, org-type and model/artifact pairs, dedupe/config_key recompute with
        collision handling, one current result per key, embeddings/sources/domains/review_queue/family_id/canonical_id re-pointed,
        resolution_decisions + admin_audit_log rows
      - handlers: LLM extraction writer carries the snapshot's run_id
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 4 files +394 −12
  2. Fri, Sep 11, 2026 9

    1. Worker reclaims this host's running jobs at start-up (restart-safe)
      …
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +10 −2
    2. Simon-Pierre Boucher · 2 files +13 −6
    3. Simon-Pierre Boucher · 1 file +19 −3
    4. Lint fixes
      …
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 7 files +12 −12
    5. LLM facts: one tier below source, plausible model names only, status vocabulary normalised
      …
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +34 −6
    6. Simon-Pierre Boucher · 3 files +166 −4
    7. Worker: acquire the concurrency slot before claiming a job
      …
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +8 −4
    8. Simon-Pierre Boucher · 12 files +1,213
Menu

Theme