mike-backend / backend /src /lib /assistantRouting /requestedMode.ts
bardd's picture
Deploy Mike backend-only Space
06671aa verified
Raw History Blame Contribute Delete
1.67 kB
/**
* Canonical assistant requested-mode ownership.
*
* Source of truth for the `requested_mode` chat request field. During
* migration `documentMode.ts` may re-export these symbols for legacy
* callers; assistant routes must import them from here.
*/
export type RequestedAssistantMode =
| "auto"
| "answer"
| "comments"
| "document_edit"
| "workflow_review"
| "document_generation"
| "web_search";
export const REQUESTED_ASSISTANT_MODES: readonly RequestedAssistantMode[] = [
"auto",
"answer",
"comments",
"document_edit",
"workflow_review",
"document_generation",
"web_search",
];
/**
* Validate an untrusted `requested_mode` request field. Throws a tagged error
* whose message contains `invalid_requested_mode` so routes can translate it to
* an HTTP 400 before any model/provider/tool/storage/database side effect.
*
* Preserves legacy behavior:
* - missing, null, or empty returns "auto";
* - any non-matching value throws a tagged error.
*/
export function parseRequestedAssistantMode(
value: unknown,
): RequestedAssistantMode {
if (value === undefined || value === null || value === "") return "auto";
if (
typeof value === "string" &&
(REQUESTED_ASSISTANT_MODES as readonly string[]).includes(value)
) {
return value as RequestedAssistantMode;
}
throw new Error(`invalid_requested_mode: ${String(value)}`);
}
export function isRequestedAssistantMode(
value: unknown,
): value is RequestedAssistantMode {
return (
typeof value === "string" &&
(REQUESTED_ASSISTANT_MODES as readonly string[]).includes(value)
);
}