fix(rectification): equal-weight collect, year-cue questions, classifier no/unsure (BUG-641–643)
Ask finance and health like other domains, put year-cued collect questions first, and let the classifier distinguish decline vs skip. Skill 10.0.22. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -36,10 +36,8 @@ import { previousInferenceFromReceipt } from "@/lib/rectification-agentic/v9/inf
|
||||
import { CHOICE_STOP_LABEL, parseAgentChoiceCopy } from "@/lib/rectification-agentic/v9/choice-card";
|
||||
import {
|
||||
classifyRectificationTurnIntent,
|
||||
isCollectDeclineUtterance,
|
||||
isCollectSkipUtterance,
|
||||
optionIdForAnswerClass,
|
||||
shouldDeclineCollectFocus,
|
||||
collectFocusCloseStatus,
|
||||
shouldContinueAgentForDatedEvent,
|
||||
classifyTurnIntentWithRetry,
|
||||
} from "@/lib/rectification-agentic/v9/turn-intent-classifier";
|
||||
@@ -309,6 +307,7 @@ export async function POST(request: Request) {
|
||||
),
|
||||
});
|
||||
let expectedWrite: "evidence" | "none" | "unknown" = "none";
|
||||
let collectIntent: "classified" | "unclassified" | null = null;
|
||||
let writeClassified = false;
|
||||
const immediateResponse = await (async (): Promise<Response | null> => {
|
||||
if (isStructuredChoice) {
|
||||
@@ -522,24 +521,6 @@ export async function POST(request: Request) {
|
||||
}
|
||||
} else if (focus && isCollectFocusSchema(focus.expectedAnswerSchema)) {
|
||||
const userMessage = parsed.data.message ?? "";
|
||||
if (isCollectDeclineUtterance(userMessage) || isCollectSkipUtterance(userMessage)) {
|
||||
const applied = await applyCollectFocusDenial(accounting, {
|
||||
userId,
|
||||
caseId,
|
||||
focusId: focus.id,
|
||||
status: isCollectSkipUtterance(userMessage) ? "skipped" : "declined",
|
||||
narrateAdopt,
|
||||
});
|
||||
const finished = await persistCollectDenialTurn({
|
||||
accounting,
|
||||
userId,
|
||||
caseId,
|
||||
requestId,
|
||||
userMessage,
|
||||
applied,
|
||||
});
|
||||
return completedMessageResponse(finished.streamText, requestId, caseId, finished.turnId);
|
||||
}
|
||||
let classified = null;
|
||||
const intent = await classifyTurnIntentWithRetry(resolvedModel, {
|
||||
focus,
|
||||
@@ -550,6 +531,7 @@ export async function POST(request: Request) {
|
||||
classified = intent.classified;
|
||||
expectedWrite = intent.expectedWrite;
|
||||
writeClassified = true;
|
||||
collectIntent = classified ? "classified" : "unclassified";
|
||||
if (classified?.intent === "stop_rectification" || classified?.intent === "ask_about_result") {
|
||||
const previous = previousInferenceFromReceipt(dossier.latestResult?.decisionReceipt ?? null);
|
||||
const applied = await applyRectificationChoice(accounting, {
|
||||
@@ -570,12 +552,14 @@ export async function POST(request: Request) {
|
||||
await transitionV9CaseStatus(accounting, userId, caseId, "paused");
|
||||
return completedMessageResponse(applied.narration, requestId, caseId, applied.turnId);
|
||||
}
|
||||
if (shouldDeclineCollectFocus(classified)) {
|
||||
const closeStatus = collectFocusCloseStatus(classified);
|
||||
if (closeStatus) {
|
||||
const continueToAgent = shouldContinueAgentForDatedEvent(classified);
|
||||
const applied = await applyCollectFocusDenial(accounting, {
|
||||
userId,
|
||||
caseId,
|
||||
focusId: focus.id,
|
||||
status: closeStatus,
|
||||
deferFollowup: continueToAgent,
|
||||
narrateAdopt,
|
||||
});
|
||||
@@ -882,6 +866,7 @@ export async function POST(request: Request) {
|
||||
timeContext,
|
||||
generationModel: selectedModel.model,
|
||||
expectedWrite,
|
||||
collectIntent,
|
||||
buildAgent: async (turnId, skillPackage, attemptId) => {
|
||||
let decision;
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user