Skip to content

Commit 5c6bd48

Browse files
committed
A couple of fixes based on Nick PR Reviewer
1 parent b51aa1d commit 5c6bd48

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.tasks.$taskParam/AIPayloadTabContent.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export function AIPayloadTabContent({
3939
}) {
4040
const [prompt, setPrompt] = useState("");
4141
const [isLoading, setIsLoading] = useState(false);
42+
const isLoadingRef = useRef(false);
4243
const [thinking, setThinking] = useState("");
4344
const [error, setError] = useState<string | null>(null);
4445
const [showThinking, setShowThinking] = useState(false);
@@ -54,8 +55,9 @@ export function AIPayloadTabContent({
5455

5556
const submitGeneration = useCallback(
5657
async (queryPrompt: string) => {
57-
if (!queryPrompt.trim() || isLoading) return;
58+
if (!queryPrompt.trim() || isLoadingRef.current) return;
5859

60+
isLoadingRef.current = true;
5961
setIsLoading(true);
6062
setThinking("");
6163
setError(null);
@@ -138,10 +140,11 @@ export function AIPayloadTabContent({
138140
setError(err instanceof Error ? err.message : "An error occurred");
139141
setLastResult("error");
140142
} finally {
143+
isLoadingRef.current = false;
141144
setIsLoading(false);
142145
}
143146
},
144-
[isLoading, resourcePath, taskIdentifier, payloadSchema, getCurrentPayload]
147+
[resourcePath, taskIdentifier, payloadSchema, getCurrentPayload]
145148
);
146149

147150
const processStreamEvent = useCallback(
@@ -351,11 +354,12 @@ export function AIPayloadTabContent({
351354
<button
352355
key={example}
353356
type="button"
357+
disabled={isLoading}
354358
onClick={() => {
355359
setPrompt(example);
356360
submitGeneration(example);
357361
}}
358-
className="group flex w-fit items-center gap-2 rounded-full border border-dashed border-charcoal-600 px-4 py-2 transition-colors hover:border-solid hover:border-indigo-500 focus-custom focus-visible:!rounded-full"
362+
className="group flex w-fit items-center gap-2 rounded-full border border-dashed border-charcoal-600 px-4 py-2 transition-colors hover:border-solid hover:border-indigo-500 focus-custom focus-visible:!rounded-full disabled:cursor-not-allowed disabled:opacity-50"
359363
>
360364
<SparkleListIcon className="size-4 shrink-0 text-text-dimmed transition group-hover:text-indigo-500" />
361365
<Paragraph

apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.ai-generate-payload.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,19 @@ import { findProjectBySlug } from "~/models/project.server";
77
import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
88
import { requireUserId } from "~/services/session.server";
99
import { EnvironmentParamSchema } from "~/utils/pathBuilder";
10-
import { inflateSync } from "node:zlib";
10+
import { inflate } from "node:zlib";
11+
import { promisify } from "node:util";
12+
13+
const inflateAsync = promisify(inflate);
1114
import { $replica } from "~/db.server";
1215
import { logger } from "~/services/logger.server";
1316
import { findCurrentWorkerDeployment } from "~/v3/models/workerDeployment.server";
1417

1518
const RequestSchema = z.object({
16-
prompt: z.string().min(1, "Prompt is required"),
17-
taskIdentifier: z.string(),
18-
payloadSchema: z.string().optional(),
19-
currentPayload: z.string().optional(),
19+
prompt: z.string().min(1, "Prompt is required").max(1000),
20+
taskIdentifier: z.string().max(256),
21+
payloadSchema: z.string().max(50_000).optional(),
22+
currentPayload: z.string().max(50_000).optional(),
2023
});
2124

2225
export async function action({ request, params }: ActionFunctionArgs) {
@@ -89,6 +92,7 @@ export async function action({ request, params }: ActionFunctionArgs) {
8992
const result = streamText({
9093
model: openai(env.AI_RUN_FILTER_MODEL ?? "gpt-5-mini"),
9194
temperature: 1,
95+
abortSignal: request.signal,
9296
system: systemPrompt,
9397
prompt,
9498
tools: {
@@ -201,7 +205,7 @@ async function getTaskSourceCode(
201205
// File contents are zlib-deflated then base64-encoded by the CLI,
202206
// stored as Buffer.from(base64String) in Prisma Bytes
203207
const base64 = Buffer.from(file.contents).toString("utf-8");
204-
const decompressed = inflateSync(Buffer.from(base64, "base64")).toString("utf-8");
208+
const decompressed = (await inflateAsync(Buffer.from(base64, "base64"))).toString("utf-8");
205209

206210
logger.info("[AI payload] Found task source code", {
207211
taskIdentifier,

0 commit comments

Comments
 (0)