export const RECOVERY_MODEL_PROFILE_KEY = "cheap" as const; export type RecoveryModelProfileWorkClass = "status_only" | "normal_model"; export const STATUS_ONLY_RECOVERY_GUARD_CONTEXT = { recoveryIntent: "status_only", allowDeliverableWork: false, allowDocumentUpdates: false, resumeRequiresNormalModel: true, } as const; const RECOVERY_MODEL_PROFILE_HINT_KEYS = [ "modelProfile", "paperclipModelProfile", "recoveryIntent", "allowDeliverableWork", "allowDocumentUpdates", "resumeRequiresNormalModel", ] as const; type RecoveryModelProfileHintKey = (typeof RECOVERY_MODEL_PROFILE_HINT_KEYS)[number]; type WithoutRecoveryModelProfileHints = Omit; export function scrubRecoveryModelProfileHints>( input: T, ): WithoutRecoveryModelProfileHints { const output: Record = { ...input }; for (const key of RECOVERY_MODEL_PROFILE_HINT_KEYS) { delete output[key]; } return output as WithoutRecoveryModelProfileHints; } export function withRecoveryModelProfileHint>( input: T, workClass: "normal_model", ): WithoutRecoveryModelProfileHints; export function withRecoveryModelProfileHint>( input: T, workClass: "status_only", ): WithoutRecoveryModelProfileHints & typeof STATUS_ONLY_RECOVERY_GUARD_CONTEXT & { modelProfile: typeof RECOVERY_MODEL_PROFILE_KEY; }; export function withRecoveryModelProfileHint>( input: T, workClass: RecoveryModelProfileWorkClass, ): | WithoutRecoveryModelProfileHints | (WithoutRecoveryModelProfileHints & typeof STATUS_ONLY_RECOVERY_GUARD_CONTEXT & { modelProfile: typeof RECOVERY_MODEL_PROFILE_KEY; }) { if (workClass === "normal_model") { return scrubRecoveryModelProfileHints(input); } return { ...scrubRecoveryModelProfileHints(input), ...STATUS_ONLY_RECOVERY_GUARD_CONTEXT, modelProfile: RECOVERY_MODEL_PROFILE_KEY, }; } export function recoveryAssigneeAdapterOverrides(_workClass: Extract) { return { modelProfile: RECOVERY_MODEL_PROFILE_KEY }; }