(args: {
client: OpencodeClient;
config: RunnerConfig;
question: LongMemEvalQuestion;
questionState: QuestionRunState;
state: RunnerStateFile;
})
| 607 | } |
| 608 | |
| 609 | async function askFinalQuestion(args: { |
| 610 | client: OpencodeClient; |
| 611 | config: RunnerConfig; |
| 612 | question: LongMemEvalQuestion; |
| 613 | questionState: QuestionRunState; |
| 614 | state: RunnerStateFile; |
| 615 | }): Promise<void> { |
| 616 | const { client, config, question, questionState, state } = args; |
| 617 | if (questionState.finalQuestion.asked && questionState.finalQuestion.answerText !== null) { |
| 618 | return; |
| 619 | } |
| 620 | |
| 621 | questionState.status = "asking-final-question"; |
| 622 | questionState.updatedAt = nowIso(); |
| 623 | state.inProgress[question.question_id] = questionState; |
| 624 | await persistState(config, state); |
| 625 | |
| 626 | const sessionId = await ensureFinalQuestionSession(client, config, question, questionState, state); |
| 627 | await sendBannerIfNeeded({ |
| 628 | client, |
| 629 | config, |
| 630 | sessionId, |
| 631 | questionState, |
| 632 | state, |
| 633 | questionId: question.question_id, |
| 634 | bannerText: buildFinalQuestionBanner(question.question_date), |
| 635 | markBannerSent: () => { |
| 636 | questionState.finalQuestion.bannerSent = true; |
| 637 | }, |
| 638 | alreadySent: questionState.finalQuestion.bannerSent, |
| 639 | operationLabel: `final-banner:${question.question_id}`, |
| 640 | }); |
| 641 | |
| 642 | await sleepWithLog(config, `Question ${question.question_id} final prompt delay`, config.finalQuestionDelayMs); |
| 643 | |
| 644 | const prompt = config.questionPromptTemplate.replace("{question}", question.question); |
| 645 | const result = await sendPromptAndCapture(client, config, sessionId, prompt, { |
| 646 | operationLabel: `final-question:${question.question_id}`, |
| 647 | tools: {}, |
| 648 | system: |
| 649 | "Answer from conversational memory only. Do not search files, do not call tools, and do not rely on external retrieval. If you do not remember, say you do not know.", |
| 650 | }); |
| 651 | |
| 652 | addOpenCodeUsage(questionState, result.usage, result.actualCostUsd, config); |
| 653 | questionState.finalQuestion.asked = true; |
| 654 | questionState.finalQuestion.answerText = result.assistantText; |
| 655 | questionState.updatedAt = nowIso(); |
| 656 | state.inProgress[question.question_id] = questionState; |
| 657 | await persistState(config, state); |
| 658 | } |
| 659 | |
| 660 | async function judgeQuestion(args: { |
| 661 | config: RunnerConfig; |
no test coverage detected