Skip to content

feat(sync): add kenari sync adapter#3171

Open
doedja wants to merge 2 commits into
anomalyco:devfrom
doedja:feat/kenari-sync-adapter
Open

feat(sync): add kenari sync adapter#3171
doedja wants to merge 2 commits into
anomalyco:devfrom
doedja:feat/kenari-sync-adapter

Conversation

@doedja

@doedja doedja commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Adds Kenari (kenari.id) to the hourly model sync workflow so its catalog stays current automatically instead of via hand-opened PRs.

How it works

  • Fetches the public https://kenari.id/v1/models endpoint. No API key and no repo secret needed.
  • Cost stays 0 by policy: Kenari bills in IDR from a prepaid wallet at its own catalog prices, so USD figures here would be a misleading currency conversion. The zero cost matches every existing hand-authored providers/kenari entry.
  • Existing factored TOMLs are preserved exactly as authored. Limits keep inheriting the canonical base model.
  • New models sync only when a canonical models/ metadata entry exists to inherit capability facts from (factorBaseModel). Kenari's dash IDs resolve to the dotted canon generically (grok-4-5 -> xai/grok-4.5), no per-model alias table.
  • Models with no canonical entry are skipped and surfaced in the sync-report notice (currently hy3:free) rather than authored from API data that has no name/release-date fields.
  • Reasoning effort values come verbatim from the endpoint's reasoning_options array (per-model, e.g. "reasoning_options":["low","medium","high","xhigh","max"] on claude-fable-5). A model with "reasoning": true and no advertised efforts gets reasoning_options = [], matching the existing hand-authored entries.

Reasoning effort values advertised by the endpoint

Model /v1/models reasoning_options
claude-fable-5, claude-sonnet-5 ["low","medium","high","xhigh","max"]
gpt-5-6-luna, gpt-5-6-sol, gpt-5-6-terra ["none","low","medium","high","xhigh","max"]
grok-4-5 ["low","medium","high"]
mimo-v2-5:free none advertised (reasoning: true) -> reasoning_options = []

First sync (included in this PR)

Status Models
Created (7) claude-fable-5, claude-sonnet-5, gpt-5-6-luna, gpt-5-6-sol, gpt-5-6-terra, grok-4-5, mimo-v2-5:free
Deleted (1) deepseek-v4-pro:free (no longer served)
Unchanged 22 (byte-identical)

Verification

  • bun models:sync kenari twice: second run is a no-op (0 created, 0 updated, 0 deleted)
  • bun validate passes
  • bun run test: same 3 pre-existing failures as a clean checkout of dev, none related

Adds Kenari (kenari.id) to the model sync workflow so its catalog stays
current automatically instead of via hand-opened PRs.

- Public /v1/models endpoint, no API key or repo secret needed.
- Cost stays 0 by policy: Kenari bills in IDR from a wallet at its own
  catalog prices, so USD figures would be a misleading conversion.
- Existing factored TOMLs are preserved as authored; limits keep
  inheriting the canonical base model (Kenari's context figures are
  themselves ingested from models.dev, so they are not authoritative).
- New models sync only when a canonical models/ metadata entry exists
  (dash IDs resolve to dotted canon, e.g. grok-4-5 -> xai/grok-4.5);
  unresolvable models are skipped with a sync-report notice.
- First sync: 7 created, 1 removed (model no longer served), 22
  unchanged; second run is a no-op and bun validate passes.
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [low] [violation] providers/kenari/models/claude-fable-5.toml:5 (also claude-sonnet-5.toml, gpt-5-6-luna.toml/sol/terra, grok-4-5.toml) - Check: The audit-reasoning-options skill requires explicit provider evidence for non-standard effort values (none, xhigh, max), and PR-body citations must state what each source proves. Why: The PR body cites the https://kenari.id/v1/models endpoint but never mentions reasoning_options at all, while the new files assert provider-specific effort sets like ["low","medium","high","xhigh","max"] (Claude 5), ["none","low","medium","high","xhigh","max"] (GPT-5.6), and ["low","medium","high"] (Grok 4.5). The adapter code sources these from the endpoint's reasoning_options field, but that mapping is not documented in the PR body, so the capability claims cannot be reviewed against the cited source without it. Action: Add a sentence to the PR body stating that the /v1/models response's reasoning_options array is the source for each new model's effort values (ideally noting the exact values the endpoint advertises per model), so the non-standard values are directly mapped to the cited endpoint.

@doedja

doedja commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the action item: the PR body now states that effort values are sourced verbatim from the endpoint's reasoning_options array, with a per-model table of the exact values https://kenari.id/v1/models advertises today (re-checked against the live endpoint before posting). Models advertising reasoning: true with no effort list get reasoning_options = [], same as the existing hand-authored entries.

@github-actions

Copy link
Copy Markdown
Contributor

No actionable findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant