From 5f0e51f48276b067196d75c4c30d296247daaf26 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sun, 11 Oct 2026 07:01:53 +0000 Subject: [PATCH] fix(ui): label the Decisions yes / no answer type instead of noul (#45931) * fix(ui): label the Decisions yes / no answer type instead of noul Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * refactor(ui): drop the unused NOUL_HELP constant Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(ui): say yes / no in the Decisions form validation message Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: mateo Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../playground/components/systemOneUI/SystemOneForm.tsx | 4 ++-- .../systemOneUI/SystemOneUI.integration.test.tsx | 8 ++++---- .../playground/components/systemOneUI/SystemOneUI.tsx | 1 - .../playground/components/systemOneUI/lib/schemas.ts | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneForm.tsx b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneForm.tsx index 96cf5208048..a241e68cb9e 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneForm.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneForm.tsx @@ -27,10 +27,10 @@ import { import type { SystemOnePayloadValidation } from "./lib/validatePayload"; const QUESTION_TYPES: readonly QuestionType[] = ["choice", "noul", "score"]; -const TYPE_LABELS: Record = { choice: "Choice", noul: "noul", score: "Score" }; +const TYPE_LABELS: Record = { choice: "Choice", noul: "Yes / no", score: "Score" }; const TYPE_HELP: Record = { choice: undefined, - noul: "noul is a yes / no question", + noul: "The model returns the probability that the answer is yes", score: undefined, }; diff --git a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.integration.test.tsx b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.integration.test.tsx index 703c50805f1..8158e5782bb 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.integration.test.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.integration.test.tsx @@ -801,15 +801,15 @@ describe("SystemOneUI integration", () => { fireEvent.blur(field); } - it("explains noul on the answer type option", async () => { + it("explains the yes / no answer type option", async () => { const user = userEvent.setup(); render(); question("has_repro_steps").getByRole("combobox", { name: "Answer type" }).focus(); await user.keyboard("{ArrowDown}"); - expect(await screen.findByRole("option", { name: "noul" })).toHaveAttribute( + expect(await screen.findByRole("option", { name: "Yes / no" })).toHaveAttribute( "title", - "noul is a yes / no question", + "The model returns the probability that the answer is yes", ); expect(screen.getByRole("option", { name: "Choice" })).not.toHaveAttribute("title"); }); @@ -835,7 +835,7 @@ describe("SystemOneUI integration", () => { fill(question("team").getByRole("textbox", { name: "Description of infra" }), "Deploys"); await user.click(screen.getByRole("button", { name: "Add question" })); - await pickAnswerType(user, "question_1", "noul"); + await pickAnswerType(user, "question_1", "Yes / no"); rename(question("question_1").getByRole("textbox", { name: "Question name" }), "urgent"); fill(question("urgent").getByRole("textbox", { name: "Instructions" }), "Is this blocking users?"); fill(question("urgent").getByRole("textbox", { name: "Yes means" }), "Nobody can log in"); diff --git a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.tsx b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.tsx index ae5def7dc48..5ece80abaf3 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/SystemOneUI.tsx @@ -36,7 +36,6 @@ interface SystemOneSendVariables { signal: AbortSignal; } -export const NOUL_HELP = "noul is a yes / no question. The model returns the probability that the answer is yes."; const CUSTOM_PRESET = "custom"; interface PresetPickerProps { diff --git a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/lib/schemas.ts b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/lib/schemas.ts index 9da040256bc..7c923fe8e8b 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/lib/schemas.ts +++ b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/systemOneUI/lib/schemas.ts @@ -20,7 +20,7 @@ const decisionQuestionSchema = z.discriminatedUnion("type", [ criteria: z.partialRecord(z.enum(["true", "false"]), decisionsJson.nullable()).nullish(), }) .refine((value) => value.instructions != null || value.criteria != null, { - message: "A noul question requires instructions or criteria.", + message: "A yes / no question requires instructions or criteria.", }), z.looseObject({ type: z.literal("score"),