
















@@ -272,6 +272,12 @@ function buildManagedContextForCachedContent(context: GooglePromptCacheContext)
272272};
273273}
274274275+async function cancelUnreadResponseBody(response: Response | undefined): Promise<void> {
276+if (response && !response.bodyUsed) {
277+await response.body?.cancel().catch(() => undefined);
278+}
279+}
280+275281async function updateGooglePromptCacheTtl(params: {
276282apiKey: string;
277283baseUrl: string;
@@ -281,22 +287,24 @@ async function updateGooglePromptCacheTtl(params: {
281287headers?: Record<string, string>;
282288signal?: AbortSignal;
283289}): Promise<{ expireTime?: string } | null> {
284-const response = await params.fetchImpl(
285- `${params.baseUrl}/${params.cachedContent}?updateMask=ttl`,
286-{
290+let response: Response | undefined;
291+try {
292+response = await params.fetchImpl(`${params.baseUrl}/${params.cachedContent}?updateMask=ttl`, {
287293method: "PATCH",
288294headers: mergeTransportHeaders(parseGeminiAuth(params.apiKey).headers, params.headers),
289295body: JSON.stringify({
290296ttl: resolveGooglePromptCacheTtl(params.cacheRetention),
291297}),
292298signal: params.signal,
293-},
294-);
295-if (!response.ok) {
296-return null;
299+});
300+if (!response.ok) {
301+return null;
302+}
303+const json = (await response.json()) as { expireTime?: string };
304+return json;
305+} finally {
306+await cancelUnreadResponseBody(response);
297307}
298-const json = (await response.json()) as { expireTime?: string };
299-return json;
300308}
301309302310async function createGooglePromptCache(params: {
@@ -311,26 +319,31 @@ async function createGooglePromptCache(params: {
311319tools?: unknown;
312320toolConfig?: unknown;
313321}): Promise<{ cachedContent: string; expireTime?: string } | null> {
314-const response = await params.fetchImpl(`${params.baseUrl}/cachedContents`, {
315-method: "POST",
316-headers: mergeTransportHeaders(parseGeminiAuth(params.apiKey).headers, params.headers),
317-body: JSON.stringify({
318-model: params.modelId.startsWith("models/") ? params.modelId : `models/${params.modelId}`,
319-ttl: resolveGooglePromptCacheTtl(params.cacheRetention),
320-systemInstruction: {
321-parts: [{ text: params.systemPrompt }],
322-},
323- ...(params.tools ? { tools: params.tools } : {}),
324- ...(params.toolConfig ? { toolConfig: params.toolConfig } : {}),
325-}),
326-signal: params.signal,
327-});
328-if (!response.ok) {
329-return null;
322+let response: Response | undefined;
323+try {
324+response = await params.fetchImpl(`${params.baseUrl}/cachedContents`, {
325+method: "POST",
326+headers: mergeTransportHeaders(parseGeminiAuth(params.apiKey).headers, params.headers),
327+body: JSON.stringify({
328+model: params.modelId.startsWith("models/") ? params.modelId : `models/${params.modelId}`,
329+ttl: resolveGooglePromptCacheTtl(params.cacheRetention),
330+systemInstruction: {
331+parts: [{ text: params.systemPrompt }],
332+},
333+ ...(params.tools ? { tools: params.tools } : {}),
334+ ...(params.toolConfig ? { toolConfig: params.toolConfig } : {}),
335+}),
336+signal: params.signal,
337+});
338+if (!response.ok) {
339+return null;
340+}
341+const json = (await response.json()) as { name?: string; expireTime?: string };
342+const cachedContent = normalizeOptionalString(json.name) ?? "";
343+return cachedContent ? { cachedContent, expireTime: json.expireTime } : null;
344+} finally {
345+await cancelUnreadResponseBody(response);
330346}
331-const json = (await response.json()) as { name?: string; expireTime?: string };
332-const cachedContent = normalizeOptionalString(json.name) ?? "";
333-return cachedContent ? { cachedContent, expireTime: json.expireTime } : null;
334347}
335348336349async function ensureGooglePromptCache(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。