Complete "Giving errors back to model" pattern documentation
Adds JSDoc example `App_updateModelContext_reportError` showing how to
report runtime errors (e.g., microphone permission denied) back to the
model using `updateModelContext`.
Updates patterns.md with clearer framing:
- Server-side (tool handler): return `{ isError: true, ... }`
- Client-side (app): use `updateModelContext` for runtime errors
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
a1ae100ef0
commit
a0265f92d2
4 changed files with 30 additions and 16 deletions
|
|
@ -20,12 +20,13 @@ Set {@link types!McpUiToolMeta.visibility Tool.\_meta.ui.visibility} to `["app"]
|
||||||
|
|
||||||
{@includeCode ./patterns.tsx#authenticatedCalls}
|
{@includeCode ./patterns.tsx#authenticatedCalls}
|
||||||
|
|
||||||
## [TODO] Giving errors back to model
|
## Giving errors back to model
|
||||||
|
|
||||||
- Before app runs: validate inputs in tool call
|
**Server-side**: Tool handler validates inputs and returns `{ isError: true, content: [...] }`. The model receives this error through the normal tool call response.
|
||||||
- After it runs: use `updateModelContext`
|
|
||||||
|
|
||||||
{@includeCode ./patterns.tsx#errorsToModel}
|
**Client-side**: If a runtime error occurs (e.g., API failure, permission denied, resource unavailable), use {@link app!App.updateModelContext updateModelContext} to inform the model:
|
||||||
|
|
||||||
|
{@includeCode ../src/app.examples.ts#App_updateModelContext_reportError}
|
||||||
|
|
||||||
## Matching host styling (CSS variables, theme, and fonts)
|
## Matching host styling (CSS variables, theme, and fonts)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,17 +27,6 @@ function authenticatedCalls(app: App) {
|
||||||
//#endregion authenticatedCalls
|
//#endregion authenticatedCalls
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Example: Giving errors back to model
|
|
||||||
*/
|
|
||||||
function errorsToModel(app: App) {
|
|
||||||
//#region errorsToModel
|
|
||||||
// Before app runs: validate inputs in tool call
|
|
||||||
// After it runs: updateModelContext
|
|
||||||
// TODO: Complete implementation
|
|
||||||
//#endregion errorsToModel
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Example: Unified host styling (theme, CSS variables, fonts)
|
* Example: Unified host styling (theme, CSS variables, fonts)
|
||||||
*/
|
*/
|
||||||
|
|
@ -132,7 +121,6 @@ function migrateFromOpenai() {
|
||||||
|
|
||||||
// Suppress unused variable warnings
|
// Suppress unused variable warnings
|
||||||
void authenticatedCalls;
|
void authenticatedCalls;
|
||||||
void errorsToModel;
|
|
||||||
void hostStylingVanillaJs;
|
void hostStylingVanillaJs;
|
||||||
void hostStylingReact;
|
void hostStylingReact;
|
||||||
void persistData;
|
void persistData;
|
||||||
|
|
|
||||||
|
|
@ -364,6 +364,28 @@ async function App_updateModelContext_structuredContent(app: App) {
|
||||||
//#endregion App_updateModelContext_structuredContent
|
//#endregion App_updateModelContext_structuredContent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example: Report runtime error to model.
|
||||||
|
*/
|
||||||
|
async function App_updateModelContext_reportError(app: App) {
|
||||||
|
//#region App_updateModelContext_reportError
|
||||||
|
try {
|
||||||
|
const _stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||||
|
// ... use _stream for transcription
|
||||||
|
} catch (err) {
|
||||||
|
// Inform the model that the app is in a degraded state
|
||||||
|
await app.updateModelContext({
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
type: "text",
|
||||||
|
text: "Error: transcription unavailable",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion App_updateModelContext_reportError
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Example: Open documentation link.
|
* Example: Open documentation link.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -674,6 +674,9 @@ export class App extends Protocol<AppRequest, AppNotification, AppResult> {
|
||||||
* @example Update with structured content
|
* @example Update with structured content
|
||||||
* {@includeCode ./app.examples.ts#App_updateModelContext_structuredContent}
|
* {@includeCode ./app.examples.ts#App_updateModelContext_structuredContent}
|
||||||
*
|
*
|
||||||
|
* @example Report runtime error to model
|
||||||
|
* {@includeCode ./app.examples.ts#App_updateModelContext_reportError}
|
||||||
|
*
|
||||||
* @returns Promise that resolves when the context update is acknowledged
|
* @returns Promise that resolves when the context update is acknowledged
|
||||||
*/
|
*/
|
||||||
updateModelContext(
|
updateModelContext(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue