mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-11 03:38:38 +00:00
style(lens): format live run files
This commit is contained in:
parent
8b9e799a19
commit
68ca72041e
7 changed files with 66 additions and 19 deletions
|
|
@ -40,7 +40,13 @@ export const fixtureReviews: readonly Review[] = [
|
|||
reasoning:
|
||||
"The user asked about a return 12 days after purchase. get_policy returned a 30-day window and the reply matches it, so the answer is grounded.",
|
||||
spans: [
|
||||
{ span_id: "s1", kind: "user", name: "input", preview: "Can I return my headphones? Bought 12 days ago.", cited: false },
|
||||
{
|
||||
span_id: "s1",
|
||||
kind: "user",
|
||||
name: "input",
|
||||
preview: "Can I return my headphones? Bought 12 days ago.",
|
||||
cited: false,
|
||||
},
|
||||
{ span_id: "s2", kind: "tool", name: "get_policy", preview: "Returns accepted within 30 days.", cited: false },
|
||||
],
|
||||
verdicts: [],
|
||||
|
|
@ -74,7 +80,13 @@ export const fixtureReviews: readonly Review[] = [
|
|||
reasoning: "issue_refund timed out, but the agent told the user the refund was processed.",
|
||||
spans: [
|
||||
{ span_id: "s1", kind: "user", name: "input", preview: "Please refund invoice 8812", cited: false },
|
||||
{ span_id: "s2", kind: "tool", name: "issue_refund", preview: "TimeoutError: upstream did not respond", cited: true },
|
||||
{
|
||||
span_id: "s2",
|
||||
kind: "tool",
|
||||
name: "issue_refund",
|
||||
preview: "TimeoutError: upstream did not respond",
|
||||
cited: true,
|
||||
},
|
||||
],
|
||||
verdicts: [{ check_id: "invented", kind: "issue", summary: "Claimed a refund succeeded after a timeout" }],
|
||||
},
|
||||
|
|
|
|||
|
|
@ -356,7 +356,10 @@ function demoLensApi(data: LensDemoData): LensApi {
|
|||
run: (lensId, jobId) => found(jobs(lensId)?.find((job) => job.id === jobId)),
|
||||
reviews: async (lensId, jobId, after) => {
|
||||
const job = await found(jobs(lensId)?.find((item) => item.id === jobId));
|
||||
return { reviews: job.reviews.slice(Math.max(0, after - (job.reviewed - job.reviews.length))), reviewed: job.reviewed };
|
||||
return {
|
||||
reviews: job.reviews.slice(Math.max(0, after - (job.reviewed - job.reviews.length))),
|
||||
reviewed: job.reviewed,
|
||||
};
|
||||
},
|
||||
execution: notInDemo,
|
||||
sample: notInDemo,
|
||||
|
|
|
|||
|
|
@ -3,14 +3,7 @@
|
|||
import { useState } from "react";
|
||||
|
||||
import { modelsUsed } from "../../model/inbox";
|
||||
import {
|
||||
analysisModel,
|
||||
doneLine,
|
||||
inFlight,
|
||||
issueCount,
|
||||
nowLine,
|
||||
stripState,
|
||||
} from "../../model/live";
|
||||
import { analysisModel, doneLine, inFlight, issueCount, nowLine, stripState } from "../../model/live";
|
||||
import { queueReasonText } from "../../model/status";
|
||||
import type { Job, Review } from "../../model/types";
|
||||
import { QueueReasonText, WorkerTasks } from "../QueueReasonText";
|
||||
|
|
@ -85,7 +78,9 @@ export function LiveRun({
|
|||
done={job.status === "completed" ? doneLine(job) : null}
|
||||
slots={Math.max(1, Math.min(job.settings.concurrency, MAX_LANES))}
|
||||
checks={job.settings.checks}
|
||||
scope={job.reviewed > reviews.length ? `From the latest ${reviews.length} of ${job.reviewed} reviewed traces` : ""}
|
||||
scope={
|
||||
job.reviewed > reviews.length ? `From the latest ${reviews.length} of ${job.reviewed} reviewed traces` : ""
|
||||
}
|
||||
waiting={waiting}
|
||||
/>
|
||||
</>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,15 @@ import { useNow } from "@/hooks/useNow";
|
|||
import { cn } from "@/lib/cva.config";
|
||||
|
||||
import { money } from "../../model/format";
|
||||
import { newestFirst, outcome, providerOf, reviewKey, shortVerdict, type IssueCount, type StripState } from "../../model/live";
|
||||
import {
|
||||
newestFirst,
|
||||
outcome,
|
||||
providerOf,
|
||||
reviewKey,
|
||||
shortVerdict,
|
||||
type IssueCount,
|
||||
type StripState,
|
||||
} from "../../model/live";
|
||||
import type { Review } from "../../model/types";
|
||||
|
||||
const RECENT = 3;
|
||||
|
|
|
|||
|
|
@ -11,18 +11,28 @@ import type { Review } from "../../model/types";
|
|||
|
||||
const LIMIT = 200;
|
||||
const RED = "text-[#e5484d]";
|
||||
const ROW = "grid h-9 w-full grid-cols-[0.75rem_minmax(0,8rem)_minmax(0,1fr)_auto] items-center gap-2 px-2 text-left text-[12px]";
|
||||
const ROW =
|
||||
"grid h-9 w-full grid-cols-[0.75rem_minmax(0,8rem)_minmax(0,1fr)_auto] items-center gap-2 px-2 text-left text-[12px]";
|
||||
|
||||
function Expanded({ review }: { review: Review }) {
|
||||
const verdicts = review.verdicts.length
|
||||
? review.verdicts
|
||||
: [{ check_id: "", kind: "pattern" as const, summary: review.cannot_assess ? "Not enough evidence to judge" : "No issue observed" }];
|
||||
: [
|
||||
{
|
||||
check_id: "",
|
||||
kind: "pattern" as const,
|
||||
summary: review.cannot_assess ? "Not enough evidence to judge" : "No issue observed",
|
||||
},
|
||||
];
|
||||
return (
|
||||
<div className="flex flex-col gap-1.5 px-7 pt-0.5 pb-2.5 text-[12px] leading-relaxed">
|
||||
{review.reasoning && <p className="text-muted-foreground">{briefReasoning(review.reasoning)}</p>}
|
||||
<ul className="flex flex-col gap-1">
|
||||
{verdicts.map((verdict, index) => (
|
||||
<li key={`${verdict.check_id}-${index}`} className={cn("flex gap-2", verdict.kind === "issue" ? RED : "text-foreground")}>
|
||||
<li
|
||||
key={`${verdict.check_id}-${index}`}
|
||||
className={cn("flex gap-2", verdict.kind === "issue" ? RED : "text-foreground")}
|
||||
>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
className={cn(
|
||||
|
|
@ -38,7 +48,17 @@ function Expanded({ review }: { review: Review }) {
|
|||
);
|
||||
}
|
||||
|
||||
function DoneRow({ review, now, open, onToggle }: { review: Review; now: number; open: boolean; onToggle: () => void }) {
|
||||
function DoneRow({
|
||||
review,
|
||||
now,
|
||||
open,
|
||||
onToggle,
|
||||
}: {
|
||||
review: Review;
|
||||
now: number;
|
||||
open: boolean;
|
||||
onToggle: () => void;
|
||||
}) {
|
||||
const result = outcome(review);
|
||||
return (
|
||||
<>
|
||||
|
|
|
|||
|
|
@ -136,7 +136,11 @@ describe("Why a run is queued", () => {
|
|||
const free = { ...worker, id: "w2" };
|
||||
const elsewhere = [running("swarm", "w2", 200)];
|
||||
expect(queueReason({ ...queued, worker_id: "w1" }, elsewhere, [worker, free], now).kind).toBe("starting");
|
||||
const self = { id: "mine", settings: job.settings, jobs: [{ ...queued, status: "running" as const, worker_id: "w1" }] };
|
||||
const self = {
|
||||
id: "mine",
|
||||
settings: job.settings,
|
||||
jobs: [{ ...queued, status: "running" as const, worker_id: "w1" }],
|
||||
};
|
||||
expect(queueReason(queued, [self], [worker], now).kind).toBe("starting");
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,12 @@ export type QueueReason =
|
|||
|
||||
type QueuedJob = Pick<Job, "id" | "worker_id" | "created_at">;
|
||||
|
||||
function workerTasks(job: QueuedJob, lenses: readonly Pick<Lens, "id" | "jobs" | "settings">[], workerIds: ReadonlySet<string>, now: number) {
|
||||
function workerTasks(
|
||||
job: QueuedJob,
|
||||
lenses: readonly Pick<Lens, "id" | "jobs" | "settings">[],
|
||||
workerIds: ReadonlySet<string>,
|
||||
now: number,
|
||||
) {
|
||||
return lenses.flatMap((lens) =>
|
||||
lens.jobs
|
||||
.filter((other) => other.status === "running" && other.id !== job.id && workerIds.has(other.worker_id ?? ""))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue