@pyric/cli 0.1.0-alpha.30.1 → 0.1.0-alpha.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assurance/.generated/conformance-verdicts.d.ts +4 -0
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +4 -0
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/bridge/server/peer.d.ts +10 -0
- package/dist/bridge/server/peer.d.ts.map +1 -1
- package/dist/bridge/server/peer.js +46 -1
- package/dist/bridge/server/peer.js.map +1 -1
- package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use.js +1 -1
- package/dist/conformance/.generated/can-i-use.js.map +1 -1
- package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
- package/dist/conformance/.generated/conformance-docs.js +1 -1
- package/dist/conformance/.generated/conformance-docs.js.map +1 -1
- package/dist/serve/ai-diagnostics-relay.d.ts +4 -1
- package/dist/serve/ai-diagnostics-relay.d.ts.map +1 -1
- package/dist/serve/ai-diagnostics-relay.js +3 -0
- package/dist/serve/ai-diagnostics-relay.js.map +1 -1
- package/dist/serve/ai-proxy.d.ts +21 -1
- package/dist/serve/ai-proxy.d.ts.map +1 -1
- package/dist/serve/ai-proxy.js +39 -14
- package/dist/serve/ai-proxy.js.map +1 -1
- package/dist/serve/ai-terminal-blocks.d.ts +6 -4
- package/dist/serve/ai-terminal-blocks.d.ts.map +1 -1
- package/dist/serve/ai-terminal-blocks.js +7 -4
- package/dist/serve/ai-terminal-blocks.js.map +1 -1
- package/dist/serve/ai-terminal-text.d.ts +8 -0
- package/dist/serve/ai-terminal-text.d.ts.map +1 -1
- package/dist/serve/ai-terminal-text.js +10 -0
- package/dist/serve/ai-terminal-text.js.map +1 -1
- package/dist/serve/entries/ai.d.ts.map +1 -1
- package/dist/serve/entries/ai.js +28 -26
- package/dist/serve/entries/ai.js.map +1 -1
- package/dist/serve/gemini-error-redaction.d.ts +6 -0
- package/dist/serve/gemini-error-redaction.d.ts.map +1 -0
- package/dist/serve/gemini-error-redaction.js +61 -0
- package/dist/serve/gemini-error-redaction.js.map +1 -0
- package/dist/serve/gemini-proxy.d.ts +40 -0
- package/dist/serve/gemini-proxy.d.ts.map +1 -0
- package/dist/serve/gemini-proxy.js +105 -0
- package/dist/serve/gemini-proxy.js.map +1 -0
- package/dist/serve/namespace.d.ts +9 -0
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +66 -14
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/sandbox-session.d.ts +3 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +1 -0
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/site-ui/docs/ai-compat/index.html +20 -1
- package/dist/serve/site-ui/docs/ai-compat.md +21 -0
- package/dist/serve/site-ui/docs/app-check-compat/index.html +8 -8
- package/dist/serve/site-ui/docs/app-check-compat.md +8 -8
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +19 -5
- package/dist/serve/site-ui/docs/build/ai-logic.md +19 -2
- package/dist/serve/site-ui/docs/index.json +10 -0
- package/dist/serve/site-ui/docs/storage-compat/index.html +2 -2
- package/dist/serve/site-ui/docs/storage-compat.md +2 -2
- package/dist/serve/site-ui/docs/tutorial/index.html +11 -1
- package/dist/serve/site-ui/docs/tutorial.md +12 -1
- package/dist/serve/site-ui/examples/chess/index.html +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +2 -0
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/ai-proxy-paths.d.ts +32 -0
- package/dist/serve/worker/ai-proxy-paths.d.ts.map +1 -0
- package/dist/serve/worker/ai-proxy-paths.js +20 -0
- package/dist/serve/worker/ai-proxy-paths.js.map +1 -0
- package/dist/serve/worker/client/ai.d.ts +3 -1
- package/dist/serve/worker/client/ai.d.ts.map +1 -1
- package/dist/serve/worker/client/ai.js +3 -0
- package/dist/serve/worker/client/ai.js.map +1 -1
- package/dist/serve/worker/entry.js +2 -0
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host-ai.d.ts +4 -5
- package/dist/serve/worker/host-ai.d.ts.map +1 -1
- package/dist/serve/worker/host-ai.js +19 -23
- package/dist/serve/worker/host-ai.js.map +1 -1
- package/dist/serve/worker/host-context.d.ts +13 -4
- package/dist/serve/worker/host-context.d.ts.map +1 -1
- package/dist/serve/worker/host-context.js.map +1 -1
- package/dist/serve/worker/inbound-validation/operation-arguments.d.ts.map +1 -1
- package/dist/serve/worker/inbound-validation/operation-arguments.js +11 -0
- package/dist/serve/worker/inbound-validation/operation-arguments.js.map +1 -1
- package/dist/serve/worker/protocol.d.ts +13 -0
- package/dist/serve/worker/protocol.d.ts.map +1 -1
- package/dist/serve/worker/protocol.js.map +1 -1
- package/package.json +4 -4
- package/src/assurance/.generated/conformance-verdicts.ts +4 -0
- package/src/bridge/server/peer.ts +49 -1
- package/src/conformance/.generated/can-i-use.ts +1 -1
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/serve/ai-diagnostics-relay.ts +6 -1
- package/src/serve/ai-proxy.ts +43 -14
- package/src/serve/ai-terminal-blocks.ts +8 -4
- package/src/serve/ai-terminal-text.ts +11 -0
- package/src/serve/entries/ai.ts +28 -27
- package/src/serve/gemini-error-redaction.ts +60 -0
- package/src/serve/gemini-proxy.ts +140 -0
- package/src/serve/namespace.ts +69 -14
- package/src/serve/sandbox-session.ts +4 -0
- package/src/serve/vite-sandbox-generation.ts +2 -0
- package/src/serve/worker/ai-proxy-paths.ts +35 -0
- package/src/serve/worker/client/ai.ts +6 -1
- package/src/serve/worker/entry.ts +2 -0
- package/src/serve/worker/host-ai.ts +23 -23
- package/src/serve/worker/host-context.ts +13 -3
- package/src/serve/worker/inbound-validation/operation-arguments.ts +11 -0
- package/src/serve/worker/protocol.ts +14 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance-docs.js","sourceRoot":"","sources":["../../../src/conformance/.generated/conformance-docs.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,sBAAsB,GAAmC,CAAC,EAAC,MAAM,EAAC,oBAAoB,EAAC,OAAO,EAAC,oBAAoB,EAAC,OAAO,EAAC,oBAAoB,EAAC,UAAU,EAAC,gqQAAgqQ,EAAC,EAAC,EAAC,MAAM,EAAC,YAAY,EAAC,OAAO,EAAC,KAAK,EAAC,OAAO,EAAC,gCAAgC,EAAC,UAAU,EAAC,i2rBAAi2rB,EAAC,EAAC,EAAC,MAAM,EAAC,WAAW,EAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAC,+BAA+B,EAAC,UAAU,EAAC,
|
|
1
|
+
{"version":3,"file":"conformance-docs.js","sourceRoot":"","sources":["../../../src/conformance/.generated/conformance-docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@ import type { SandboxEvent } from 'pyric/sandbox';
|
|
|
9
9
|
* agent driving `pyric dev` in process therefore saw NOTHING.
|
|
10
10
|
*
|
|
11
11
|
* - `request_rejected`: a bad role, empty `contents`, a missing thought
|
|
12
|
-
* signature,
|
|
12
|
+
* signature, a request without a valid App Check token, or an engine
|
|
13
|
+
* that answered an error envelope.
|
|
13
14
|
* - `response_blocked`: the SILENT refusal. A safety / recitation /
|
|
14
15
|
* blocklist filter answers HTTP 200 with an empty candidate, so nothing
|
|
15
16
|
* throws anywhere and the app simply renders nothing.
|
|
@@ -65,6 +66,8 @@ interface AiRejectionRelayPayload {
|
|
|
65
66
|
code?: number;
|
|
66
67
|
/** The rejection reason: production's own message for shape errors. */
|
|
67
68
|
message: string;
|
|
69
|
+
/** Pyric's guidance beside production's message, such as the App Check gate's. */
|
|
70
|
+
hint?: string;
|
|
68
71
|
}
|
|
69
72
|
/** Shape POSTed for a `response_blocked` event. Carries the wire's own
|
|
70
73
|
* vocabulary, `finishReason` (a candidate was withheld) or `blockReason`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-diagnostics-relay.d.ts","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD
|
|
1
|
+
{"version":3,"file":"ai-diagnostics-relay.d.ts","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH;;;oDAGoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC;CAC7D;AAED;6DAC6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,sBAAsB,CAAC;AAKtF;;4EAE4E;AAC5E,UAAU,uBAAuB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;kEAC8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;iBAIiB;AACjB,UAAU,qBAAqB;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;qEACqE;AACrE,UAAU,+BAA+B;IACvC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,wBAAwB,GAChC,uBAAuB,GACvB,qBAAqB,GACrB,+BAA+B,CAAC;AAsGpC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,wBAAwB,GAAG,IAAI,CAM3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,KAAK,GAAG,IAAI,CAgB5F"}
|
|
@@ -34,6 +34,9 @@ function toRejectionPayload(event) {
|
|
|
34
34
|
payload.status = detailText(detail, 'status');
|
|
35
35
|
if (typeof detail.code === 'number')
|
|
36
36
|
payload.code = detail.code;
|
|
37
|
+
const hint = detailText(detail, 'hint');
|
|
38
|
+
if (hint !== undefined)
|
|
39
|
+
payload.hint = hint;
|
|
37
40
|
return payload;
|
|
38
41
|
}
|
|
39
42
|
/** Narrow a `response_blocked` event to its relay payload. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-diagnostics-relay.js","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-diagnostics-relay.js","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"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"}
|
package/dist/serve/ai-proxy.d.ts
CHANGED
|
@@ -22,6 +22,9 @@ export interface AiDiagnosticThrottle {
|
|
|
22
22
|
export declare const AI_PROXY_DEFAULT_UPSTREAM = "http://localhost:11434/v1";
|
|
23
23
|
/** The route the dev server mounts for OpenAI-compatible traffic. */
|
|
24
24
|
export declare const AI_PROXY_ROUTE = "/__pyric/ai-proxy";
|
|
25
|
+
/** Largest request body the proxy forwards: the hosted method route's limit,
|
|
26
|
+
* which already carries AI requests with inline images. */
|
|
27
|
+
export declare const AI_PROXY_BODY_LIMIT_BYTES: number;
|
|
25
28
|
/** The upstream-failure shapes the proxy surfaces to the terminal. */
|
|
26
29
|
type AiProxyFailure = {
|
|
27
30
|
kind: 'unreachable';
|
|
@@ -91,6 +94,12 @@ export declare function permitAiUpstreams(ai: {
|
|
|
91
94
|
* Responses remain incremental; cancellation stops reading without a warning.
|
|
92
95
|
*/
|
|
93
96
|
export declare function fetchAiUpstream(input: Parameters<typeof fetch>[0], init: RequestInit | undefined, throttle: AiDiagnosticThrottle, logger?: ServeLogger, source?: string): Promise<Response>;
|
|
97
|
+
/**
|
|
98
|
+
* Read an AI proxy request's body, at most {@link AI_PROXY_BODY_LIMIT_BYTES}.
|
|
99
|
+
* Past the limit it answers 413, and on a broken upload 400, and returns
|
|
100
|
+
* null: the caller sends nothing upstream. Both proxy routes read through it.
|
|
101
|
+
*/
|
|
102
|
+
export declare function readAiProxyBody(req: IncomingMessage, res: ServerResponse): Promise<Uint8Array<ArrayBuffer> | null>;
|
|
94
103
|
/**
|
|
95
104
|
* Handle `POST /__pyric/ai-proxy/<suffix>`: a same-origin passthrough to the
|
|
96
105
|
* configured OpenAI-compatible upstream, so the browser openai engine
|
|
@@ -101,7 +110,11 @@ export declare function fetchAiUpstream(input: Parameters<typeof fetch>[0], init
|
|
|
101
110
|
* - POST only (the OpenAI chat-completions surface is POST); 405 otherwise.
|
|
102
111
|
* - the path suffix + query ride through verbatim
|
|
103
112
|
* (`/__pyric/ai-proxy/chat/completions` becomes `<upstream>/chat/completions`).
|
|
104
|
-
* - the
|
|
113
|
+
* - the caller must pass the namespace's loopback guard (Host, and an
|
|
114
|
+
* Origin naming this server when one is sent), which the namespace runs
|
|
115
|
+
* before this handler: the upstream may carry the developer's key.
|
|
116
|
+
* - the request body is forwarded verbatim, up to
|
|
117
|
+
* {@link AI_PROXY_BODY_LIMIT_BYTES} (413 past it); headers minus the
|
|
105
118
|
* origin-sensitive/hop-by-hop set above (`authorization` DOES forward,
|
|
106
119
|
* since upstreams may require a key).
|
|
107
120
|
* - the response body is STREAMED through chunk-by-chunk. SSE passthrough
|
|
@@ -115,5 +128,12 @@ export declare function fetchAiUpstream(input: Parameters<typeof fetch>[0], init
|
|
|
115
128
|
* means dropped silently (same opt-out contract as the denial relay).
|
|
116
129
|
*/
|
|
117
130
|
export declare function handleAiProxy(configuredUpstream: string | undefined, throttle: AiDiagnosticThrottle, req: IncomingMessage, res: ServerResponse, url: URL, logger?: ServeLogger): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Send an upstream's answer to the caller: its status and content type, then
|
|
133
|
+
* the body chunk by chunk. SSE passthrough must never buffer. A dropped
|
|
134
|
+
* client cancels the upstream read so an abandoned stream doesn't keep the
|
|
135
|
+
* upstream generating.
|
|
136
|
+
*/
|
|
137
|
+
export declare function relayAiUpstream(upstream: Response, res: ServerResponse): Promise<void>;
|
|
118
138
|
export {};
|
|
119
139
|
//# sourceMappingURL=ai-proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-proxy.d.ts","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-proxy.d.ts","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/serve/ai-proxy.js
CHANGED
|
@@ -2,10 +2,15 @@ import { redactUrl } from 'pyric/ai/internal';
|
|
|
2
2
|
import { sanitizeForTerminal } from './ai-terminal-text.js';
|
|
3
3
|
import { permitGuardHost } from '../register/net-guard.js';
|
|
4
4
|
import { FIREBASE_AI_LOGIC_HOST } from '../google-endpoints.js';
|
|
5
|
+
import { HOSTED_METHOD_BODY_LIMIT } from './hosted/method-protocol.js';
|
|
6
|
+
import { BODY_TOO_LARGE_CODE, collectRawBody } from '../bridge/server/peer.js';
|
|
5
7
|
/** Default upstream: local Ollama's OpenAI-compatible endpoint. */
|
|
6
8
|
export const AI_PROXY_DEFAULT_UPSTREAM = 'http://localhost:11434/v1';
|
|
7
9
|
/** The route the dev server mounts for OpenAI-compatible traffic. */
|
|
8
10
|
export const AI_PROXY_ROUTE = '/__pyric/ai-proxy';
|
|
11
|
+
/** Largest request body the proxy forwards: the hosted method route's limit,
|
|
12
|
+
* which already carries AI requests with inline images. */
|
|
13
|
+
export const AI_PROXY_BODY_LIMIT_BYTES = HOSTED_METHOD_BODY_LIMIT;
|
|
9
14
|
/**
|
|
10
15
|
* Request headers that must NOT be forwarded upstream: origin-sensitive
|
|
11
16
|
* browser context (`origin`/`referer`/`cookie`, since the upstream is a
|
|
@@ -233,6 +238,22 @@ export async function fetchAiUpstream(input, init, throttle, logger, source = 'a
|
|
|
233
238
|
status: upstream.status, statusText: upstream.statusText, headers: upstream.headers,
|
|
234
239
|
});
|
|
235
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Read an AI proxy request's body, at most {@link AI_PROXY_BODY_LIMIT_BYTES}.
|
|
243
|
+
* Past the limit it answers 413, and on a broken upload 400, and returns
|
|
244
|
+
* null: the caller sends nothing upstream. Both proxy routes read through it.
|
|
245
|
+
*/
|
|
246
|
+
export async function readAiProxyBody(req, res) {
|
|
247
|
+
try {
|
|
248
|
+
return await collectRawBody(req, AI_PROXY_BODY_LIMIT_BYTES);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
const tooLarge = error.code === BODY_TOO_LARGE_CODE;
|
|
252
|
+
const status = tooLarge ? 413 : 400;
|
|
253
|
+
res.writeHead(status, { 'content-type': 'text/plain' }).end(tooLarge ? 'Payload Too Large' : 'Bad Request');
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
236
257
|
/**
|
|
237
258
|
* Handle `POST /__pyric/ai-proxy/<suffix>`: a same-origin passthrough to the
|
|
238
259
|
* configured OpenAI-compatible upstream, so the browser openai engine
|
|
@@ -243,7 +264,11 @@ export async function fetchAiUpstream(input, init, throttle, logger, source = 'a
|
|
|
243
264
|
* - POST only (the OpenAI chat-completions surface is POST); 405 otherwise.
|
|
244
265
|
* - the path suffix + query ride through verbatim
|
|
245
266
|
* (`/__pyric/ai-proxy/chat/completions` becomes `<upstream>/chat/completions`).
|
|
246
|
-
* - the
|
|
267
|
+
* - the caller must pass the namespace's loopback guard (Host, and an
|
|
268
|
+
* Origin naming this server when one is sent), which the namespace runs
|
|
269
|
+
* before this handler: the upstream may carry the developer's key.
|
|
270
|
+
* - the request body is forwarded verbatim, up to
|
|
271
|
+
* {@link AI_PROXY_BODY_LIMIT_BYTES} (413 past it); headers minus the
|
|
247
272
|
* origin-sensitive/hop-by-hop set above (`authorization` DOES forward,
|
|
248
273
|
* since upstreams may require a key).
|
|
249
274
|
* - the response body is STREAMED through chunk-by-chunk. SSE passthrough
|
|
@@ -264,17 +289,10 @@ export async function handleAiProxy(configuredUpstream, throttle, req, res, url,
|
|
|
264
289
|
const upstreamBase = resolveAiProxyUpstream(configuredUpstream).target;
|
|
265
290
|
const suffix = url.pathname.slice(AI_PROXY_ROUTE.length);
|
|
266
291
|
const target = `${upstreamBase}${suffix}${url.search}`;
|
|
267
|
-
//
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
req.on('end', () => resolve(Buffer.concat(chunks)));
|
|
272
|
-
req.on('error', reject);
|
|
273
|
-
});
|
|
274
|
-
// Copy into a plain-ArrayBuffer view; fetch's BodyInit typing rejects
|
|
275
|
-
// Buffer's ArrayBufferLike backing.
|
|
276
|
-
const body = new Uint8Array(raw.byteLength);
|
|
277
|
-
body.set(raw);
|
|
292
|
+
// The request body is a bounded JSON payload, read once; the RESPONSE streams.
|
|
293
|
+
const body = await readAiProxyBody(req, res);
|
|
294
|
+
if (body === null)
|
|
295
|
+
return;
|
|
278
296
|
const headers = {};
|
|
279
297
|
for (const [key, value] of Object.entries(req.headers)) {
|
|
280
298
|
if (value === undefined)
|
|
@@ -298,6 +316,15 @@ export async function handleAiProxy(configuredUpstream, throttle, req, res, url,
|
|
|
298
316
|
`(default ${AI_PROXY_DEFAULT_UPSTREAM}).`);
|
|
299
317
|
return;
|
|
300
318
|
}
|
|
319
|
+
await relayAiUpstream(upstream, res);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Send an upstream's answer to the caller: its status and content type, then
|
|
323
|
+
* the body chunk by chunk. SSE passthrough must never buffer. A dropped
|
|
324
|
+
* client cancels the upstream read so an abandoned stream doesn't keep the
|
|
325
|
+
* upstream generating.
|
|
326
|
+
*/
|
|
327
|
+
export async function relayAiUpstream(upstream, res) {
|
|
301
328
|
const responseHeaders = { 'cache-control': 'no-store' };
|
|
302
329
|
const contentType = upstream.headers.get('content-type');
|
|
303
330
|
if (contentType)
|
|
@@ -308,8 +335,6 @@ export async function handleAiProxy(configuredUpstream, throttle, req, res, url,
|
|
|
308
335
|
return;
|
|
309
336
|
}
|
|
310
337
|
res.flushHeaders?.();
|
|
311
|
-
// Chunk-by-chunk passthrough. A dropped client cancels the upstream read
|
|
312
|
-
// so an abandoned SSE stream doesn't keep the upstream generating.
|
|
313
338
|
const reader = upstream.body.getReader();
|
|
314
339
|
res.on('close', () => {
|
|
315
340
|
void reader.cancel().catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-proxy.js","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-proxy.js","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export interface AiRejectionPayload {
|
|
|
12
12
|
code?: unknown;
|
|
13
13
|
/** The rejection reason: production's own message for shape errors. */
|
|
14
14
|
message?: unknown;
|
|
15
|
+
/** Pyric's guidance beside production's message, such as the App Check gate's. */
|
|
16
|
+
hint?: unknown;
|
|
15
17
|
}
|
|
16
18
|
/** Loosely-typed mirror of the AI blocked-response payload. Unlike a
|
|
17
19
|
* rejection this carries no `message`: a filter block has no error envelope
|
|
@@ -51,10 +53,10 @@ export type AiDiagnosticPayload = AiRejectionPayload & AiBlockedPayload & AiMode
|
|
|
51
53
|
/**
|
|
52
54
|
* Format a relayed AI broker rejection into the compact terminal block, the
|
|
53
55
|
* same ` [pyric] ...` idiom the denial relay and the ai-proxy warning print.
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* unit tests.
|
|
56
|
+
* The reason production itself gives, then the model (with the resolved
|
|
57
|
+
* engine, since a rejection reads very differently for `scripted` than for a
|
|
58
|
+
* real upstream), then the wire status, then pyric's guidance when the broker
|
|
59
|
+
* gave one (the App Check gate does). Exported for unit tests.
|
|
58
60
|
*/
|
|
59
61
|
export declare function formatAiRejectionBlock(payload: AiRejectionPayload): string;
|
|
60
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-terminal-blocks.d.ts","sourceRoot":"","sources":["../../src/serve/ai-terminal-blocks.ts"],"names":[],"mappings":"AAkBA;8DAC8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-terminal-blocks.d.ts","sourceRoot":"","sources":["../../src/serve/ai-terminal-blocks.ts"],"names":[],"mappings":"AAkBA;8DAC8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;mCAGmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;yDAEyD;AACzD,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,2EAA2E;AAC3E,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,0BAA0B,CAAC;AA4BrG;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAgB1E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAgBtE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAS1F;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAC7C,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACrD,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACrD;;8DAE0D;IAC1D,UAAU,EAAE,OAAO,CAAC;CACrB;AAwBD;+DAC+D;AAC/D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAIxE"}
|
|
@@ -31,10 +31,10 @@ function formatModelLine(model, engine) {
|
|
|
31
31
|
/**
|
|
32
32
|
* Format a relayed AI broker rejection into the compact terminal block, the
|
|
33
33
|
* same ` [pyric] ...` idiom the denial relay and the ai-proxy warning print.
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* unit tests.
|
|
34
|
+
* The reason production itself gives, then the model (with the resolved
|
|
35
|
+
* engine, since a rejection reads very differently for `scripted` than for a
|
|
36
|
+
* real upstream), then the wire status, then pyric's guidance when the broker
|
|
37
|
+
* gave one (the App Check gate does). Exported for unit tests.
|
|
38
38
|
*/
|
|
39
39
|
export function formatAiRejectionBlock(payload) {
|
|
40
40
|
const message = readText(payload.message) ?? 'request rejected';
|
|
@@ -51,6 +51,9 @@ export function formatAiRejectionBlock(payload) {
|
|
|
51
51
|
suffix = ` (${code})`;
|
|
52
52
|
lines.push(` ${label}${suffix}`);
|
|
53
53
|
}
|
|
54
|
+
const hint = readText(payload.hint);
|
|
55
|
+
if (hint !== null)
|
|
56
|
+
lines.push(` ${hint}`);
|
|
54
57
|
return lines.join('\n');
|
|
55
58
|
}
|
|
56
59
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-terminal-blocks.js","sourceRoot":"","sources":["../../src/serve/ai-terminal-blocks.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-terminal-blocks.js","sourceRoot":"","sources":["../../src/serve/ai-terminal-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,14 @@
|
|
|
23
23
|
export declare const AI_TERMINAL_TEXT_MAX = 512;
|
|
24
24
|
/** Cut text to {@link AI_TERMINAL_TEXT_MAX}, marking the cut. */
|
|
25
25
|
export declare function capTerminalText(text: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Replace control, bidi-override and line-separator characters with spaces,
|
|
28
|
+
* and change nothing else: no flattening, no whitespace collapsing, no cut.
|
|
29
|
+
* For one line of text a reader copies out of the terminal, such as a
|
|
30
|
+
* pasteable command or JSON fixture, where the exact spacing and the whole
|
|
31
|
+
* length matter. The caller splits lines first and bounds the total.
|
|
32
|
+
*/
|
|
33
|
+
export declare function stripTerminalControls(text: string): string;
|
|
26
34
|
/**
|
|
27
35
|
* Flatten an upstream-authored string into ONE terminal-safe line.
|
|
28
36
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-terminal-text.d.ts","sourceRoot":"","sources":["../../src/serve/ai-terminal-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAKxC,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAOD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD"}
|
|
1
|
+
{"version":3,"file":"ai-terminal-text.d.ts","sourceRoot":"","sources":["../../src/serve/ai-terminal-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAKxC,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAOD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD"}
|
|
@@ -32,6 +32,16 @@ export function capTerminalText(text) {
|
|
|
32
32
|
/** Control, bidi-override, and line-separator characters. A remote string
|
|
33
33
|
* carrying these can forge a terminal line or reverse the text around it. */
|
|
34
34
|
const TERMINAL_UNSAFE_CHARS = /[\u0000-\u001f\u007f-\u009f\u061c\u200e\u200f\u2028-\u202e\u2066-\u2069\ufeff]/g;
|
|
35
|
+
/**
|
|
36
|
+
* Replace control, bidi-override and line-separator characters with spaces,
|
|
37
|
+
* and change nothing else: no flattening, no whitespace collapsing, no cut.
|
|
38
|
+
* For one line of text a reader copies out of the terminal, such as a
|
|
39
|
+
* pasteable command or JSON fixture, where the exact spacing and the whole
|
|
40
|
+
* length matter. The caller splits lines first and bounds the total.
|
|
41
|
+
*/
|
|
42
|
+
export function stripTerminalControls(text) {
|
|
43
|
+
return text.replace(TERMINAL_UNSAFE_CHARS, ' ');
|
|
44
|
+
}
|
|
35
45
|
/**
|
|
36
46
|
* Flatten an upstream-authored string into ONE terminal-safe line.
|
|
37
47
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-terminal-text.js","sourceRoot":"","sources":["../../src/serve/ai-terminal-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,iBAAiB,EAAE,CAAC;AACtE,CAAC;AAED;8EAC8E;AAC9E,MAAM,qBAAqB,GACzB,iFAAiF,CAAC;AAEpF;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvF,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"ai-terminal-text.js","sourceRoot":"","sources":["../../src/serve/ai-terminal-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,iBAAiB,EAAE,CAAC;AACtE,CAAC;AAED;8EAC8E;AAC9E,MAAM,qBAAqB,GACzB,iFAAiF,CAAC;AAEpF;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvF,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/ai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/ai.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AAW/C,OAAO,EACL,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,eAAe,EACf,eAAe,EACf,OAAO,EACP,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAqMlB,eAAO,MAAM,KAAK,EAuCb,OAAO,UAAU,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,cAAc,qBAAqB,CAAC"}
|
package/dist/serve/entries/ai.js
CHANGED
|
@@ -16,8 +16,11 @@
|
|
|
16
16
|
* config with no `baseUrl` targets serve's same-origin `/__pyric/ai-proxy`
|
|
17
17
|
* route (which forwards to the configured upstream, default
|
|
18
18
|
* `http://localhost:11434/v1`) — so a localhost Ollama needs no CORS setup
|
|
19
|
-
* on EITHER path. A
|
|
20
|
-
*
|
|
19
|
+
* on EITHER path. A gemini config without its own `apiKey` sends through
|
|
20
|
+
* `/__pyric/ai-proxy/gemini`, where the server attaches the key from its
|
|
21
|
+
* environment, so the key never reaches the page. A custom AnswerEngine
|
|
22
|
+
* OBJECT can't cross the port and is rejected in worker mode rather than
|
|
23
|
+
* creating a second page-local backend.
|
|
21
24
|
* Direct/in-process `pyric/ai` sandboxes still accept custom engines.
|
|
22
25
|
*
|
|
23
26
|
* Engine config is per-sandbox (#98.4) and first-call-wins at the worker
|
|
@@ -32,12 +35,11 @@ import { createTransportAI } from 'pyric/ai/internal';
|
|
|
32
35
|
import { FirebaseError, getApp } from 'pyric/app';
|
|
33
36
|
import { isSandboxAppDeleted } from 'pyric/app/internal';
|
|
34
37
|
import { aiGenerateContent, aiCountTokens, aiStreamGenerateContent } from '../worker/client.js';
|
|
38
|
+
import { AI_PROXY_PATH, browserGeminiEngine } from '../worker/ai-proxy-paths.js';
|
|
35
39
|
import { useWorker } from './worker-runtime.js';
|
|
36
40
|
import { workerClientForApp } from './app-client.js';
|
|
37
41
|
// ── Mirror surface — path-independent (the mirror always runs in-page) ────
|
|
38
42
|
export { AIError, AIErrorCode, Backend, BackendType, GoogleAIBackend, VertexAIBackend, AIModel, ChatSession, ChatSessionBase, GenerativeModel, AnyOfSchema, ArraySchema, BooleanSchema, IntegerSchema, NumberSchema, ObjectSchema, Schema, StringSchema, BlockReason, FinishReason, FunctionCallingMode, HarmBlockMethod, HarmBlockThreshold, HarmCategory, HarmProbability, HarmSeverity, ImageConfigAspectRatio, ImageConfigImageSize, Language, Modality, Outcome, POSSIBLE_ROLES, ResponseModality, SchemaType, ThinkingLevel, URLRetrievalStatus, getGenerativeModel, } from 'pyric/ai';
|
|
39
|
-
/** The serve proxy route the browser openai engine defaults to (#98.2). */
|
|
40
|
-
const AI_PROXY_PATH = '/__pyric/ai-proxy';
|
|
41
43
|
/** A custom AnswerEngine object (vs a plain, worker-cloneable EngineConfig). */
|
|
42
44
|
function isAnswerEngine(engine) {
|
|
43
45
|
return typeof engine.generateContent === 'function';
|
|
@@ -103,20 +105,8 @@ function wireToEngineOption(wire) {
|
|
|
103
105
|
};
|
|
104
106
|
}
|
|
105
107
|
const isGeminiWire = wire.kind === 'gemini';
|
|
106
|
-
if (isGeminiWire)
|
|
107
|
-
|
|
108
|
-
kind: 'gemini',
|
|
109
|
-
};
|
|
110
|
-
const hasBaseUrl = wire.baseUrl !== undefined;
|
|
111
|
-
if (hasBaseUrl) {
|
|
112
|
-
result.baseUrl = wire.baseUrl;
|
|
113
|
-
}
|
|
114
|
-
const hasApiKey = wire.apiKey !== undefined;
|
|
115
|
-
if (hasApiKey) {
|
|
116
|
-
result.apiKey = wire.apiKey;
|
|
117
|
-
}
|
|
118
|
-
return result;
|
|
119
|
-
}
|
|
108
|
+
if (isGeminiWire)
|
|
109
|
+
return browserGeminiEngine(wire);
|
|
120
110
|
return {
|
|
121
111
|
kind: 'scripted',
|
|
122
112
|
...(wire.script !== undefined
|
|
@@ -124,7 +114,10 @@ function wireToEngineOption(wire) {
|
|
|
124
114
|
: {}),
|
|
125
115
|
};
|
|
126
116
|
}
|
|
127
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* In-page path: default an openai config's absent baseUrl to the proxy, and
|
|
119
|
+
* send a gemini config without its own key through the gemini proxy.
|
|
120
|
+
*/
|
|
128
121
|
function withProxyDefault(options) {
|
|
129
122
|
const engine = options?.engine;
|
|
130
123
|
if (!engine || isAnswerEngine(engine))
|
|
@@ -133,6 +126,10 @@ function withProxyDefault(options) {
|
|
|
133
126
|
if (config.kind === 'openai' && config.baseUrl === undefined) {
|
|
134
127
|
return { ...options, engine: { ...config, baseUrl: AI_PROXY_PATH } };
|
|
135
128
|
}
|
|
129
|
+
const isKeylessGemini = config.kind === 'gemini' && engine.apiKey === undefined;
|
|
130
|
+
if (isKeylessGemini) {
|
|
131
|
+
return { ...options, engine: browserGeminiEngine({ kind: 'gemini' }) };
|
|
132
|
+
}
|
|
136
133
|
return options;
|
|
137
134
|
}
|
|
138
135
|
function aiErrorFromWire(err, modelResource, op) {
|
|
@@ -141,23 +138,28 @@ function aiErrorFromWire(err, modelResource, op) {
|
|
|
141
138
|
return envelope ? setAiEvidence(aiErrorFromEnvelope(envelope, modelResource, op), err && typeof err === 'object' ? getAiEvidence(err) ?? {} : {}) : err;
|
|
142
139
|
}
|
|
143
140
|
// ── The port-forwarding AnswerEngine (worker path) ─────────────────────────
|
|
141
|
+
/**
|
|
142
|
+
* The handle's App Check claim rides every request to the worker broker,
|
|
143
|
+
* which plays AI Logic's gate (`pyric/ai`'s `app-check-gate.ts`).
|
|
144
|
+
*/
|
|
144
145
|
function portEngine(db, engineWire) {
|
|
145
|
-
const params = (model, request) => ({
|
|
146
|
+
const params = (model, request, appCheck) => ({
|
|
146
147
|
model,
|
|
147
148
|
request,
|
|
148
149
|
...(engineWire !== undefined ? { engine: engineWire } : {}),
|
|
150
|
+
...(appCheck !== undefined ? { appCheck } : {}),
|
|
149
151
|
});
|
|
150
152
|
const engine = {
|
|
151
|
-
async generateContent(req, model) {
|
|
153
|
+
async generateContent(req, model, appCheck) {
|
|
152
154
|
try {
|
|
153
|
-
return unpackAiEvidence(await aiGenerateContent(db, params(model, req)));
|
|
155
|
+
return unpackAiEvidence(await aiGenerateContent(db, params(model, req, appCheck)));
|
|
154
156
|
}
|
|
155
157
|
catch (err) {
|
|
156
158
|
throw aiErrorFromWire(err, model, 'generateContent');
|
|
157
159
|
}
|
|
158
160
|
},
|
|
159
|
-
streamGenerateContent(req, model) {
|
|
160
|
-
const inner = aiStreamGenerateContent(db, params(model, req));
|
|
161
|
+
streamGenerateContent(req, model, appCheck) {
|
|
162
|
+
const inner = aiStreamGenerateContent(db, params(model, req, appCheck));
|
|
161
163
|
return (async function* mapped() {
|
|
162
164
|
try {
|
|
163
165
|
for await (const chunk of inner)
|
|
@@ -168,9 +170,9 @@ function portEngine(db, engineWire) {
|
|
|
168
170
|
}
|
|
169
171
|
})();
|
|
170
172
|
},
|
|
171
|
-
async countTokens(req, model) {
|
|
173
|
+
async countTokens(req, model, appCheck) {
|
|
172
174
|
try {
|
|
173
|
-
return unpackAiEvidence(await aiCountTokens(db, params(model, req)));
|
|
175
|
+
return unpackAiEvidence(await aiCountTokens(db, params(model, req, appCheck)));
|
|
174
176
|
}
|
|
175
177
|
catch (err) {
|
|
176
178
|
throw aiErrorFromWire(err, model, 'countTokens');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/serve/entries/ai.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/serve/entries/ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `text` with every credential in `credentials` removed, and every
|
|
3
|
+
* credential URL parameter masked. A JSON body stays JSON.
|
|
4
|
+
*/
|
|
5
|
+
export declare function redactUpstreamError(text: string, credentials: readonly string[]): string;
|
|
6
|
+
//# sourceMappingURL=gemini-error-redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-error-redaction.d.ts","sourceRoot":"","sources":["../../src/serve/gemini-error-redaction.ts"],"names":[],"mappings":"AAmDA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAIxF"}
|