…its i18n catalogs
Everything a product needs to integrate the shared picker without
re-implementing platform behaviour. Driven by Agent Builder's adoption
(UiPath/Agents#5858), but none of it is agent-specific.
Region mapping moves in. `homeRegion` accepts the raw OMS organization
region as PortalShell serves it ("UnitedStates", "Japan") as well as a
geography code, so hosts stop maintaining their own tables - the first
one already had JP/SG where the gateway uses JA/SI, silently disabling
out-of-region chips. GLOBAL resolves to no home region: it is a routing
target, not a place an org lives.
Modality is a product decision. The picker renders whatever Discovery
serves; `modelType` is on the DTO and `isTextGenerationModel` is exported
as an opt-in filter. An indexing surface picks embeddings from the same
catalog, so excluding them centrally would break it. Only
`isBlockedByPolicy` is still dropped unconditionally.
Selection resolves by modelId OR modelName - for `value` and for the
recommended/preview override lists. Hosts persist names and author those
lists from Model Hub config, which also carries names.
The picker performs the BYO configuration DELETE itself against
api/byo/product/llm-configurations/{id}, a platform route it already holds
credentials for, and reports failures with the gateway's own message.
`onModelDeleted` lets hosts reconcile what the picker cannot see - chiefly
choosing a replacement selection, which stays a product decision.
`onDeleteModel` still works as the opt-out, so no consumer breaks.
`loadModelPickerMessages(locale)` replaces the 14 literal dynamic imports
every host would otherwise hand-write. It cannot be a template-literal
import - a consumer's bundler cannot resolve that through the package
exports map - and the symptom of getting it wrong reads like a translation
bug rather than a bundling one.
104 tests, up from 78.
Squashed from nine commits and rebased onto main so the branch carries no
merge commits: this repo merges by rebase, and a plain "Merge branch main"
commit pushed via Update branch fails commit-message validation.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The picker stamped cost-tier chips itself whenever the DTO carried cost data, using hardcoded $1/M and $5/M thresholds. That made a product decision — what counts as expensive — in the design system, where no product could configure it. Its own doc comment said the picker did NOT do this; the code did.
The picker now stamps nothing unless the product passes
badgesFor.defaultCostTierstays as the example classifier, documented as such — copy it and tune the thresholds, or classify on something else. The pool badge kinds are the shared contract; the classifier is not.104 tests. The "stamps by default" test is now "does not stamp unless opted in";
badgesFor([])suppression is its own case.