Skip to content

feat(card): document the consumer flow and derive Using it - #133

Merged
ezietlowTT merged 2 commits into
mainfrom
stisi/feat/card-consumer-quickstart
Sep 22, 2026
Merged

ezietlowTT merged 2 commits into
mainfrom
stisi/feat/card-consumer-quickstart

Conversation

@stisiTT

@stisiTT stisiTT commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

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-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, so the card shows the
recommended path first and the self-contained one immediately after.

## 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. Capabilities are read per profile, since
they deep-merge per profile and the old code read only the default.

## Feedback names the repo's HF Discussions (the channel that reaches the
package author), tt report issue for tooling problems, and
support@tenstorrent.com for product feedback.

  • 12 of 13 new tests fail on the base ref
  • Full offline suite: 929 passed
  • Renderer only, no hardware validation
  • Live cards pick this up only on their next tt-model package --container

Stacked on #129.

🤖 Generated with Claude Code

stisiTT and others added 2 commits September 18, 2026 21:52
…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>
@stisiTT
stisiTT marked this pull request as ready for review September 21, 2026 19:41
@stisiTT
stisiTT requested review from a team and ezietlowTT as code owners September 21, 2026 19:41
Base automatically changed from stisi/fix/card-capacity-columns to main September 22, 2026 15:08

@ezietlowTT ezietlowTT left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_COMPATIBLE as a real boolean on each launcher (True/True/False) rather than string-matching SERVER_DESC — good call; a caller comparing the prose fragment would flip behaviour on a copy-edit with the suite green.
  • _capability_notes reads capabilities per profile and qualifies when profiles disagree, marking the default. Both failure directions are covered by tests (a tools-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.

@ezietlowTT
ezietlowTT merged commit 8ddef1f into main Sep 22, 2026
7 of 8 checks passed
@ezietlowTT
ezietlowTT deleted the stisi/feat/card-consumer-quickstart branch September 22, 2026 15:17
ezietlowTT added a commit that referenced this pull request Sep 22, 2026
… 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>
stisiTT added a commit that referenced this pull request Sep 23, 2026
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.
stisiTT added a commit that referenced this pull request Sep 24, 2026
* 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>
stisiTT added a commit that referenced this pull request Sep 24, 2026
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.
stisiTT added a commit that referenced this pull request Sep 24, 2026
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.
anirudTT added a commit that referenced this pull request Oct 1, 2026
…) (#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>
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.

2 participants