Repository navigation
feat(card): document the consumer flow and derive Using it - #133
Conversation
…table max_num_seqs and max_model_len configure a continuous-batching engine. A tt-dit-server profile has neither -- its launcher does not even ask for them -- so every multi-profile diffusion card rendered two columns of empty cells, a table that states nothing. Include the columns only when some profile fills them; LLM cards are unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A generated card told a reader what the package IS and then stopped: no command to run it, and nothing about what a client actually sends. The Quickstart now leads with the consumer path -- `uv tool install tenstorrent`, `tt model pull`, `tt serve` -- and a "Without tt-cli" fence right under it does the same job with `tt-model` alone. Both fences, not one. AGENTS.md invariant 1 says a package must be fully usable with tt-model by itself and a card must never introduce a step that requires tt-cli; a card printing only `tt` commands broke that in the one artifact every consumer reads. Leading with `tt` is still right -- it is what GA ships and it installs in one line -- so the card shows the recommended path first and the self-contained one immediately after, and the prose that explains the flow names both spellings rather than leaving the second fence as an unexplained footnote. `## Using it` is derived per kind from a new OPENAI_COMPATIBLE launcher attribute rather than by string-matching SERVER_DESC, which coupled card semantics to prose: rewording that string would have silently told readers a tt-dit-server speaks the OpenAI API. A test now pins the two to agree. Capabilities are read per profile, because they deep-merge per profile and the old code read only the default -- claiming a reasoning parser for every profile directly under a table inviting the reader to pick a different one, and never mentioning a `tools` profile the default lacked. Qualified lines mark which profile is the default, so "On `--profile latency`" cannot read as "only if you pass this" when a bare serve is already on it. `## Feedback` names the channel that reaches the package author (the repo's HF Discussions), `tt report issue` for tooling problems (it files against tenstorrent/tt-cli, so it is described that way), and support@tenstorrent.com for product feedback. `tt report feedback` is deliberately absent: it is still a stub that exits UNSUPPORTED. The example's card.quickstart now carries a prompting note instead of restating the port and the commands. tt-model-yaml/SKILL.md tells authors not to restate generated facts, and the example is what they copy; its drift guard asserts the absence rather than requiring the duplication. Live cards pick all of this up only on their next `tt-model package --container`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ezietlowTT
left a comment
There was a problem hiding this comment.
Approve. Reviewed and tested (card/manifest tests 180 passed; full offline suite 929 passed). Stacks on #129 — that should merge first.
The derivation work is the strong part and I verified it against the code:
OPENAI_COMPATIBLEas a real boolean on each launcher (True/True/False) rather than string-matchingSERVER_DESC— good call; a caller comparing the prose fragment would flip behaviour on a copy-edit with the suite green._capability_notesreads capabilities per profile and qualifies when profiles disagree, marking the default. Both failure directions are covered by tests (atools-only non-default profile documented; a reasoning parser only the default sets not claimed universally) — this is exactly the subtle bug that a flat read of the default would cause under a table inviting the reader to pick another profile.- The diffusion path states the negation ("not an OpenAI-compatible chat API") out loud and points at real sources (
GET /docs,code/) only when there are no author notes to point at — no dead "see above". - Capacity columns dropped when no profile fills them (dit servers), so no more two empty columns.
One thing for @ezietlowTT to confirm — a product/positioning call, not a bug: the generated card now leads with the tt (tt-cli / tenstorrent) commands and puts the tt-model-only path second under "Without tt-cli". It does not violate AGENTS.md invariant 1 (the tt-model fence is retained and carries --with-weights), and the reasoning is sound, but it does make tt-cli the primary advertised path on every published card. If that's the intended direction (it reads as coordinated with the tt-cli mirror work) this is right as-is; flagging it because it changes what every consumer sees first.
community-labeling red is the known #80 gating.
… repo (#109) Addresses @anirudTT's review of #115. The first version of this fix matched on the authored repo (`built.repo`), which never moves in the manifest — so it only worked for the first `push --repo`: once the card no longer literally contained the old repo, every later push matched nothing and silently no-op'd. Worse, a plain push after a redirected one left the canonical repo's card advertising someone else's repo. Anchor on the command prefix instead, so the swap replaces whatever repo is currently on the line regardless of history — self-healing and idempotent. Also handles all four generated command lines, including the `tt model pull` / `tt serve` (tt-cli) pair that #133 added since this branch was opened; the old two-line swap would have missed them. Requiring a `namespace/name` after the prefix keeps a stray prose line from matching, and `card.description` / an author's appended `card.quickstart` prose are left alone. - Reworked `_repoint_card_quickstart` (drops the `old_repo` arg; the no-op case is the `swapped == text` check now). - Regression tests: repeated/redirected pushes stay correct (canonical -> a -> canonical -> b), the tt-cli lines are repointed, prose is untouched, and the end-to-end render -> repoint test now covers all four commands to guard format drift. - Merged current main (picks up #133's new card format). Full offline suite: 991 passed. Closes #109 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The skill and template described whitelisting as an allowlist file in a Tenstorrent-controlled HF dataset repo. That is not the mechanism the team settled on: reviewing a bundle copies it into the Tenstorrent HF org, so the repo a model sits in IS the signal and there is no list file at all. Publishing an authoring skill that tells every future author otherwise would have been worse than publishing nothing. The generator-owned gaps table was written before #129 and #133-#135 landed and claimed no CardSettings field existed for the sections it listed. Most now do, so a missing section is usually author-fixable rather than a generator gap, which inverts the default the skill started with. Rewritten against the merged source, leaving only what is genuinely still unbuilt: perf summary frontmatter, the Model CI row, and Changelog. Two smaller corrections. The frontmatter block is the RENDERED card, which is flat because that is what the Hub indexes, but the authoring yaml takes the licence nested and forbids unknown keys, so copying those three lines verbatim would not load; said so in place. And the skill is now mirrored into .codex/ like the other author-facing ones. The AGENTS.md trailer edit is dropped: #121 rewrites the same line as part of a docs pass, and it does not belong in a skill PR either way.
* feat(skills): add model-card-standardizer skill Give DX-team authors and reviewers a repeatable way to check a model's card against the DEVSTACK-447 template, separating what an author can fix in card.description/quickstart from what needs a render_model_card/CardSettings code change. * docs(skills): correct the model-card template's consumer quickstart `tt model pull` takes no --with-weights flag (only --bundle/--weights-only/ --offline) and pulls a bundle's weights by default, so the template as written would have had every card print a usage error. Also note that `tt report feedback` is still a stub, so the Feedback section must point at `tt report issue` alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(skills): card shows both consumer flows; whitelist is an allowlist Two review findings against the template this skill enforces. AGENTS.md invariant 1 says tt-model alone must do the whole job and no step may need tt-cli, so a card whose only quickstart is `tt` violates the repo's own doctrine; the template now shows the `tt` fence first and a `tt-model` fence after it. And a `tt-whitelisted` repo tag can never be a review signal, because it lives in the author's own README frontmatter and any author can add it on the Hub -- review status moves to an allowlist in a Tenstorrent-controlled dataset repo, and the template stops asking for the tag. Feedback now leads with the bundle's Discussions page, the one channel that reaches its author; `tt report issue` files against tt-cli. Also stops AGENTS.md and the branch skill pinning a specific model name in the required trailer -- every recent commit already carried a different one. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(skills): correct the whitelist mechanism and refresh the gaps table The skill and template described whitelisting as an allowlist file in a Tenstorrent-controlled HF dataset repo. That is not the mechanism the team settled on: reviewing a bundle copies it into the Tenstorrent HF org, so the repo a model sits in IS the signal and there is no list file at all. Publishing an authoring skill that tells every future author otherwise would have been worse than publishing nothing. The generator-owned gaps table was written before #129 and #133-#135 landed and claimed no CardSettings field existed for the sections it listed. Most now do, so a missing section is usually author-fixable rather than a generator gap, which inverts the default the skill started with. Rewritten against the merged source, leaving only what is genuinely still unbuilt: perf summary frontmatter, the Model CI row, and Changelog. Two smaller corrections. The frontmatter block is the RENDERED card, which is flat because that is what the Hub indexes, but the authoring yaml takes the licence nested and forbids unknown keys, so copying those three lines verbatim would not load; said so in place. And the skill is now mirrored into .codex/ like the other author-facing ones. The AGENTS.md trailer edit is dropped: #121 rewrites the same line as part of a docs pass, and it does not belong in a skill PR either way. --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Jashan Pratap Singh <jashansingh@tenstorrent.com>
The skill and template described whitelisting as an allowlist file in a Tenstorrent-controlled HF dataset repo. That is not the mechanism the team settled on: reviewing a bundle copies it into the Tenstorrent HF org, so the repo a model sits in IS the signal and there is no list file at all. Publishing an authoring skill that tells every future author otherwise would have been worse than publishing nothing. The generator-owned gaps table was written before #129 and #133-#135 landed and claimed no CardSettings field existed for the sections it listed. Most now do, so a missing section is usually author-fixable rather than a generator gap, which inverts the default the skill started with. Rewritten against the merged source, leaving only what is genuinely still unbuilt: perf summary frontmatter, the Model CI row, and Changelog. Two smaller corrections. The frontmatter block is the RENDERED card, which is flat because that is what the Hub indexes, but the authoring yaml takes the licence nested and forbids unknown keys, so copying those three lines verbatim would not load; said so in place. And the skill is now mirrored into .codex/ like the other author-facing ones. The AGENTS.md trailer edit is dropped: #121 rewrites the same line as part of a docs pass, and it does not belong in a skill PR either way.
The skill and template described whitelisting as an allowlist file in a Tenstorrent-controlled HF dataset repo. That is not the mechanism the team settled on: reviewing a bundle copies it into the Tenstorrent HF org, so the repo a model sits in IS the signal and there is no list file at all. Publishing an authoring skill that tells every future author otherwise would have been worse than publishing nothing. The generator-owned gaps table was written before #129 and #133-#135 landed and claimed no CardSettings field existed for the sections it listed. Most now do, so a missing section is usually author-fixable rather than a generator gap, which inverts the default the skill started with. Rewritten against the merged source, leaving only what is genuinely still unbuilt: perf summary frontmatter, the Model CI row, and Changelog. Two smaller corrections. The frontmatter block is the RENDERED card, which is flat because that is what the Hub indexes, but the authoring yaml takes the licence nested and forbids unknown keys, so copying those three lines verbatim would not load; said so in place. And the skill is now mirrored into .codex/ like the other author-facing ones. The AGENTS.md trailer edit is dropped: #121 rewrites the same line as part of a docs pass, and it does not belong in a skill PR either way.
…) (#115) * fix(push): repoint the model card's quickstart to the pushed repo (#109) `render_model_card` bakes the manifest's repo into the card's `tt-model pull` /`tt-model serve` quickstart lines at package time, before any `push --repo` override is known. Pushing a package to a different repo then published a card whose quickstart pointed a reader at a repo that isn't there. `push_container` now repoints those two command lines from the packaged repo (`container.built.repo`) to the actual push target when they differ. Those lines are the only place the card names the repo, so the swap is complete; a no-op when the repos match or the card is missing. Closes #109 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(push): anchor card-quickstart repoint on the command, not the old repo (#109) Addresses @anirudTT's review of #115. The first version of this fix matched on the authored repo (`built.repo`), which never moves in the manifest — so it only worked for the first `push --repo`: once the card no longer literally contained the old repo, every later push matched nothing and silently no-op'd. Worse, a plain push after a redirected one left the canonical repo's card advertising someone else's repo. Anchor on the command prefix instead, so the swap replaces whatever repo is currently on the line regardless of history — self-healing and idempotent. Also handles all four generated command lines, including the `tt model pull` / `tt serve` (tt-cli) pair that #133 added since this branch was opened; the old two-line swap would have missed them. Requiring a `namespace/name` after the prefix keeps a stray prose line from matching, and `card.description` / an author's appended `card.quickstart` prose are left alone. - Reworked `_repoint_card_quickstart` (drops the `old_repo` arg; the no-op case is the `swapped == text` check now). - Regression tests: repeated/redirected pushes stay correct (canonical -> a -> canonical -> b), the tt-cli lines are repointed, prose is untouched, and the end-to-end render -> repoint test now covers all four commands to guard format drift. - Merged current main (picks up #133's new card format). Full offline suite: 991 passed. Closes #109 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Anirudh Ramchandran <aramchandran@tenstorrent.com>
A generated card told a reader what the package is and then stopped: no command
to run it, and nothing about what a client actually sends. The Quickstart now
leads with
uv tool install tenstorrent/tt model pull/tt serve, and a"Without tt-cli" fence right under it does the same job with
tt-modelalone.Both fences, not one. AGENTS.md invariant 1 says a package must be fully usable
with tt-model by itself and a card must never introduce a step that requires
tt-cli; a card printing only
ttcommands broke that in the one artifact everyconsumer reads. Leading with
ttis still right, so the card shows therecommended path first and the self-contained one immediately after.
## Using itis derived per kind from a newOPENAI_COMPATIBLElauncherattribute rather than by string-matching
SERVER_DESC, which coupled cardsemantics to prose — rewording that string would have silently told readers a
tt-dit-serverspeaks the OpenAI API. Capabilities are read per profile, sincethey deep-merge per profile and the old code read only the default.
## Feedbacknames the repo's HF Discussions (the channel that reaches thepackage author),
tt report issuefor tooling problems, andsupport@tenstorrent.com for product feedback.
tt-model package --containerStacked on #129.
🤖 Generated with Claude Code