fix: name the Microsoft search provider Web IQ - #283
Closed
Menci wants to merge 5 commits into
Closed
Conversation
The endpoints this provider has always called -- api.microsoft.ai/v3/search/web and /v3/browse, authenticated with x-apikey -- belong to Microsoft Web IQ, which was unreleased and documented only internally when the provider landed, so it was carried under the internal name "Microsoft Grounding". That name was never public, and the product it most resembles, Grounding with Bing Search, is a different service that is still generally available on api.bing.microsoft.com behind an Azure Microsoft.Bing/accounts resource. An operator reading the old label would provision that resource and receive a key this provider cannot use; the endpoint ignores Ocp-Apim-Subscription-Key outright. Rename the provider identifier to web-iq across the config contract, the stored column, and recorded usage, and migrate existing rows so credentials keep working and per-provider history stays continuous. The dashboard now labels it "Microsoft Web IQ", the name the product uses for itself, links to the Web IQ portal where its keys are actually issued, and drops the Bing mark for the Microsoft one -- Web IQ ships no mark of its own. The search-usage provider rejection message named two of the three providers and would have drifted again here, so derive it from the provider list.
The dump's searchConfig carries the web search provider under its own key, so a backup taken before the Web IQ rename spells it microsoftGrounding and names the provider microsoft-grounding. Strict parsing already rejects both, but it would report a field-level complaint about a file that is simply too old. Bump the export format to 18 instead. Import already gates on an exact version with an actionable message, so a stale backup now fails on the envelope and says to re-export, and no key-shape compatibility has to live in the parser. The dashboard kept a hand-copied version constant, which the bump would have left one behind — enough to reject every fresh backup file as unreadable. Type it against the gateway's own literal so the next bump breaks the build here rather than at runtime.
Three textual conflicts, all where the base reworked something this branch had also touched: - apps/web/src/api/types.ts now derives its contracts from the Hono client, so the hand-written SearchConfig this branch had renamed is gone entirely and the derived type picks the rename up from the gateway. - The dashboard's backup-file parsing moved into its own module. The export version bump and its pin to the gateway's literal move with it. - A search-usage assertion gained a view check on one side and the renamed provider on the other; both apply. The base's new backup-file suite pinned the envelope version as a literal, which the bump would have broken, and it never exercised the version gate it was testing around. It now reads the constant and rejects a superseded envelope.
Three things the Fluent migration left rough on this page, found by driving it in a browser against a live Web IQ rejection. The OK/Error pill and the failure box carried hardcoded light-dark() hex pairs, which do not track the theme the way every other surface here does. They become a Fluent Badge and a MessageBar -- the same MessageBar the save path above already uses, so a failed test now reads like every other failure on the page. The upstream and model pickers had become bare native selects, dropping the per-option descriptions the previous dashboard showed. They are Fluent Dropdowns again: an upstream carries the same kind description the upstreams list uses, and a model carries its id when the display name differs, staying silent when the two are the same rather than printing it twice. The summary line printed the raw provider identifier and hardcoded English around it. It now reads the provider's own label, falling back to the id verbatim if the gateway names one this build does not know, and both fragments go through i18n. Behind the panel, the provider error extractor had no rung for Web IQ's error envelope, so its whole JSON body reached the operator and overflowed the panel. Reading userMessage -- with technicalDetails behind it -- turns that into the one sentence Microsoft wrote for exactly this purpose.
Owner
Author
|
Codex agent: Consolidating this follow-up into #277 as requested; the branch remains available while its changes are merged and verified there. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #277.
Summary
Name the provider what it is. The Microsoft web search provider has always called
api.microsoft.ai/v3/search/weband/v3/browsewith anx-apikeyheader. Those are Microsoft Web IQ endpoints. The product was unreleased and documented only on Microsoft's intranet when the provider landed, so it shipped under the internal name "Microsoft Grounding" — a name that was never public.That matters beyond tidiness. The name it most resembles, Grounding with Bing Search, is a different service that is still generally available, on
api.bing.microsoft.combehind an AzureMicrosoft.Bing/accountsresource. An operator reading the old label would provision that resource and receive a key this provider cannot use; the Web IQ endpoint ignoresOcp-Apim-Subscription-Keyoutright and answersAuthNoToken. Microsoft's own FAQ keeps both products alive side by side, so this was a misnomer pointing at a live product, not a stale name.web-iqacross the config contract, the stored column, and recorded usage, migrating existing rows so credentials keep working and per-provider usage history stays continuoussearch-usageprovider rejection message from the provider list; it named two of the three providers and would have drifted again hereRetire the pre-rename export format. A backup written before this change spells the provider key
microsoftGrounding, which strict parsing rejects with a field-level complaint about a file that is simply too old. Bumping the envelope to 18 makes it fail on the version with an actionable message, and keeps compatibility shims out of the parser. The dashboard kept its own copy of that version, which the bump would have left one behind — enough to reject every backup file the deployment writes — so it is now annotated with the gateway's own literal and the next bump breaks the build instead of failing at runtime.Finish the Fluent migration on this page. Driving it in a browser against a live Web IQ rejection surfaced four rough edges:
light-dark()hex pairs; they are a FluentBadgeand aMessageBarnow, the same MessageBar the save path already usesDropdowns again, an upstream carrying the same kind description the upstreams list uses and a model carrying its id only when it differs from the display nameuserMessageturns that into the one sentence Microsoft wrote for itReferences
Verification
pnpm run lintpnpm run typecheckpnpm run test— 423 files, 4,754 tests passedAuthInvalidApiKeyrejection from Web IQ