Skip to content

Commit 851c1f1

Browse files
bumped timeout in playground route to 30s (tensorzero#3041)
* Set ANTHROPIC_API_KEY when regenerating fixtures * bumped timeout in playground route to 30s * moved timeout over to server entry? --------- Co-authored-by: Aaron Hill <[email protected]>
1 parent 68f3cb9 commit 851c1f1

File tree

5 files changed

+79
-0
lines changed

5 files changed

+79
-0
lines changed

.github/workflows/merge-queue.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ jobs:
275275
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
276276
FIREWORKS_ACCOUNT_ID: ${{ secrets.FIREWORKS_ACCOUNT_ID }}
277277
FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
278+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
278279

279280
# See 'ci/README.md' at the repository root for more details.
280281
check-all-live-tests-passed:

.github/workflows/slash-command-regen-fixtures.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ env:
99
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
1010
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
1111
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
12+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
1213

1314
permissions:
1415
pull-requests: write # For doing the emoji reaction on a PR comment
@@ -42,6 +43,7 @@ jobs:
4243
echo "FIREWORKS_API_KEY=not_used" >> ui/fixtures/.env
4344
echo "FIREWORKS_BASE_URL=http://mock-inference-provider:3030/fireworks/" >> ui/fixtures/.env
4445
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> ui/fixtures/.env
46+
echo "ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}" >> ui/fixtures/.env
4547
echo "OPENAI_BASE_URL=http://mock-inference-provider:3030/openai/" >> ui/fixtures/.env
4648
echo "FIREWORKS_BASE_URL=http://mock-inference-provider:3030/fireworks/" >> ui/fixtures/.env
4749
echo "S3_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> ui/fixtures/.env

.github/workflows/ui-tests-e2e-model-inference-cache.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ on:
1313
required: false
1414
FIREWORKS_API_KEY:
1515
required: false
16+
ANTHROPIC_API_KEY:
17+
required: false
1618
inputs:
1719
regen_cache:
1820
required: true
@@ -95,6 +97,7 @@ jobs:
9597
echo "FIREWORKS_ACCOUNT_ID=${{ secrets.FIREWORKS_ACCOUNT_ID }}" >> fixtures/.env-gateway
9698
echo "FIREWORKS_API_KEY=${{ secrets.FIREWORKS_API_KEY }}" >> fixtures/.env-gateway
9799
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> fixtures/.env-gateway
100+
echo "ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}" >> fixtures/.env-gateway
98101
echo "S3_ACCESS_KEY_ID=${{ secrets.S3_ACCESS_KEY_ID }}" >> fixtures/.env-gateway
99102
echo "S3_SECRET_ACCESS_KEY=${{ secrets.S3_SECRET_ACCESS_KEY }}" >> fixtures/.env-gateway
100103
./fixtures/regenerate-model-inference-cache.sh
@@ -124,6 +127,7 @@ jobs:
124127
echo "FIREWORKS_ACCOUNT_ID=${{ secrets.FIREWORKS_ACCOUNT_ID || 'not_used' }}" >> fixtures/.env-gateway
125128
echo "FIREWORKS_API_KEY=${{ secrets.FIREWORKS_API_KEY || 'not_used' }}" >> fixtures/.env-gateway
126129
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY || 'not_used' }}" >> fixtures/.env-gateway
130+
echo "ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY || 'not_used' }}" >> fixtures/.env-gateway
127131
echo "S3_ACCESS_KEY_ID=${{ secrets.S3_ACCESS_KEY_ID }}" >> fixtures/.env-gateway
128132
echo "S3_SECRET_ACCESS_KEY=${{ secrets.S3_SECRET_ACCESS_KEY }}" >> fixtures/.env-gateway
129133
docker compose -f fixtures/docker-compose.e2e.yml up --no-build -d

.github/workflows/ui-tests-e2e.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ jobs:
113113
# The 'ui-tests-e2e' job tests that the UI container starts without some of these variables set,
114114
echo "FIREWORKS_ACCOUNT_ID=fake_fireworks_account" >> fixtures/.env
115115
echo "FIREWORKS_API_KEY=not_used" >> fixtures/.env
116+
echo "ANTHROPIC_API_KEY=not_used" >> fixtures/.env
116117
echo "FIREWORKS_BASE_URL=http://mock-inference-provider:3030/fireworks/" >> fixtures/.env
117118
echo "OPENAI_API_KEY=not_used" >> fixtures/.env
118119
echo "OPENAI_BASE_URL=http://mock-inference-provider:3030/openai/" >> fixtures/.env

ui/app/entry.server.tsx

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { PassThrough } from "node:stream";
2+
3+
import type { AppLoadContext, EntryContext } from "react-router";
4+
import { createReadableStreamFromReadable } from "@react-router/node";
5+
import { ServerRouter } from "react-router";
6+
import { isbot } from "isbot";
7+
import type { RenderToPipeableStreamOptions } from "react-dom/server";
8+
import { renderToPipeableStream } from "react-dom/server";
9+
10+
export const streamTimeout = 30_000;
11+
12+
export default function handleRequest(
13+
request: Request,
14+
responseStatusCode: number,
15+
responseHeaders: Headers,
16+
routerContext: EntryContext,
17+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
18+
loadContext: AppLoadContext,
19+
// If you have middleware enabled:
20+
// loadContext: unstable_RouterContextProvider
21+
) {
22+
return new Promise((resolve, reject) => {
23+
let shellRendered = false;
24+
const userAgent = request.headers.get("user-agent");
25+
26+
// Ensure requests from bots and SPA Mode renders wait for all content to load before responding
27+
// https://react.dev/reference/react-dom/server/renderToPipeableStream#waiting-for-all-content-to-load-for-crawlers-and-static-generation
28+
const readyOption: keyof RenderToPipeableStreamOptions =
29+
(userAgent && isbot(userAgent)) || routerContext.isSpaMode
30+
? "onAllReady"
31+
: "onShellReady";
32+
33+
const { pipe, abort } = renderToPipeableStream(
34+
<ServerRouter context={routerContext} url={request.url} />,
35+
{
36+
[readyOption]() {
37+
shellRendered = true;
38+
const body = new PassThrough();
39+
const stream = createReadableStreamFromReadable(body);
40+
41+
responseHeaders.set("Content-Type", "text/html");
42+
43+
resolve(
44+
new Response(stream, {
45+
headers: responseHeaders,
46+
status: responseStatusCode,
47+
}),
48+
);
49+
50+
pipe(body);
51+
},
52+
onShellError(error: unknown) {
53+
reject(error);
54+
},
55+
onError(error: unknown) {
56+
responseStatusCode = 500;
57+
// Log streaming rendering errors from inside the shell. Don't log
58+
// errors encountered during initial shell rendering since they'll
59+
// reject and get logged in handleDocumentRequest.
60+
if (shellRendered) {
61+
console.error(error);
62+
}
63+
},
64+
},
65+
);
66+
67+
// Abort the rendering stream after the `streamTimeout` so it has time to
68+
// flush down the rejected boundaries
69+
setTimeout(abort, streamTimeout + 1000);
70+
});
71+
}

0 commit comments

Comments
 (0)