@modelprofile.com/flexharness-models 13.1.0 → 13.2.0
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.
|
@@ -109,6 +109,22 @@ export declare function applySmartAiCacheProviderOptions(input: {
|
|
|
109
109
|
promptCacheKey?: string;
|
|
110
110
|
sessionId?: string;
|
|
111
111
|
}): TSmartAiProviderOptions | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* What an idle budget rests on:
|
|
114
|
+
* - `configured`: `cache.warmDurationMs`.
|
|
115
|
+
* - `anthropic-5m`, `anthropic-1h`: the shortest `cache_control` lifetime of the sent request.
|
|
116
|
+
* - `openai-30m`: GPT-5.6 and later on OpenAI's API, whose `prompt_cache_options.ttl` is 30 minutes
|
|
117
|
+
* after the last write or reuse.
|
|
118
|
+
* - `openai-24h`: `prompt_cache_retention: '24h'` sent to an earlier model on OpenAI's API, which
|
|
119
|
+
* typically keeps the prefix around 30 minutes and up to 24 hours, without promising more.
|
|
120
|
+
* - `openai-in-memory`: an earlier model on OpenAI's API with `in_memory` or no retention sent, or
|
|
121
|
+
* any model on the ChatGPT backend, which takes no retention and documents none: in-memory
|
|
122
|
+
* entries last 5 to 10 minutes of inactivity.
|
|
123
|
+
*
|
|
124
|
+
* OpenAI's documentation: https://developers.openai.com/api/docs/guides/prompt-caching, read
|
|
125
|
+
* 2026-10-11. No basis promises a hit.
|
|
126
|
+
*/
|
|
127
|
+
export type TSmartAiCacheBudgetBasis = 'configured' | 'anthropic-5m' | 'anthropic-1h' | 'openai-30m' | 'openai-24h' | 'openai-in-memory';
|
|
112
128
|
/** Observation at the model dispatch boundary; no field certifies a cache write or hit. */
|
|
113
129
|
export interface ISmartAiCacheDispatch {
|
|
114
130
|
dispatchedAt: number;
|
|
@@ -116,17 +132,32 @@ export interface ISmartAiCacheDispatch {
|
|
|
116
132
|
warmDurationMs?: number;
|
|
117
133
|
/** Epoch milliseconds measured from dispatch, never from the start of a wait. */
|
|
118
134
|
idleDeadline?: number;
|
|
119
|
-
source?: 'configured' | 'anthropic';
|
|
135
|
+
source?: 'configured' | 'anthropic' | 'openai';
|
|
136
|
+
/** Present with `warmDurationMs`: what the budget rests on. */
|
|
137
|
+
basis?: TSmartAiCacheBudgetBasis;
|
|
120
138
|
}
|
|
121
|
-
/**
|
|
139
|
+
/** Anthropic cache controls emitted by the owning adapter, not proposed prompt/provider options. */
|
|
122
140
|
export interface ISmartAiEffectiveCachePolicy {
|
|
123
141
|
provider: 'anthropic';
|
|
124
142
|
controls: readonly unknown[];
|
|
125
143
|
}
|
|
144
|
+
/** The cache settings of a serialized OpenAI request, as the owning adapter sent it. */
|
|
145
|
+
export interface ISmartAiOpenAiEffectiveCachePolicy {
|
|
146
|
+
provider: 'openai';
|
|
147
|
+
/** `api`: OpenAI's API. `chatgpt`: the ChatGPT Codex backend of ChatGPT accounts. */
|
|
148
|
+
endpoint: 'api' | 'chatgpt';
|
|
149
|
+
/** The request's `model`. */
|
|
150
|
+
model: string;
|
|
151
|
+
/** The request's `prompt_cache_retention`, when sent. */
|
|
152
|
+
retention?: unknown;
|
|
153
|
+
/** The request's `prompt_cache_options.ttl`, when sent. */
|
|
154
|
+
ttl?: unknown;
|
|
155
|
+
}
|
|
156
|
+
export type TSmartAiEffectiveCachePolicy = ISmartAiEffectiveCachePolicy | ISmartAiOpenAiEffectiveCachePolicy;
|
|
126
157
|
export interface ISmartAiCachePolicyObservation {
|
|
127
158
|
dispatchedAt: number;
|
|
128
159
|
/** Absent when the final adapter/transport policy cannot be confirmed. */
|
|
129
|
-
policy?:
|
|
160
|
+
policy?: TSmartAiEffectiveCachePolicy;
|
|
130
161
|
}
|
|
131
162
|
export type TSmartAiCachePolicyObserver = (observation: ISmartAiCachePolicyObservation) => void;
|
|
132
163
|
type TSmartAiCachePolicyObserverFactory = (observer: TSmartAiCachePolicyObserver) => plugins.LanguageModelV4;
|
|
@@ -137,7 +168,7 @@ export declare function bindSmartAiCachePolicyObserver(model: TSmartAiLanguageMo
|
|
|
137
168
|
export declare function observeSmartAiCacheDispatch(input: {
|
|
138
169
|
cache?: TSmartAiCacheSetting;
|
|
139
170
|
dispatchedAt: number;
|
|
140
|
-
effectivePolicy?:
|
|
171
|
+
effectivePolicy?: TSmartAiEffectiveCachePolicy;
|
|
141
172
|
}): ISmartAiCacheDispatch;
|
|
142
173
|
/** Bound one wait; reserve up to one second (10% for short budgets) for the next boundary. */
|
|
143
174
|
export declare function getSmartAiCacheWaitMs(requestedMs: number, dispatch?: ISmartAiCacheDispatch, now?: number): number;
|
|
@@ -346,11 +346,11 @@ export function observeSmartAiCacheDispatch(input) {
|
|
|
346
346
|
throw new Error('Cache dispatch time must be a non-negative safe integer.');
|
|
347
347
|
}
|
|
348
348
|
const observation = { dispatchedAt: input.dispatchedAt };
|
|
349
|
-
const withDuration = (warmDurationMs, source) => {
|
|
349
|
+
const withDuration = (warmDurationMs, source, basis) => {
|
|
350
350
|
const idleDeadline = input.dispatchedAt + warmDurationMs;
|
|
351
351
|
if (!Number.isSafeInteger(idleDeadline))
|
|
352
352
|
throw new Error('Cache idle deadline exceeds the safe integer range.');
|
|
353
|
-
return { ...observation, warmDurationMs, idleDeadline, source };
|
|
353
|
+
return { ...observation, warmDurationMs, idleDeadline, source, basis };
|
|
354
354
|
};
|
|
355
355
|
const cache = cacheOptionsFromSetting(input.cache);
|
|
356
356
|
if (!cache)
|
|
@@ -359,11 +359,15 @@ export function observeSmartAiCacheDispatch(input) {
|
|
|
359
359
|
if (!Number.isSafeInteger(cache.warmDurationMs) || cache.warmDurationMs <= 0) {
|
|
360
360
|
throw new Error('cache.warmDurationMs must be a positive safe integer.');
|
|
361
361
|
}
|
|
362
|
-
return withDuration(cache.warmDurationMs, 'configured');
|
|
362
|
+
return withDuration(cache.warmDurationMs, 'configured', 'configured');
|
|
363
363
|
}
|
|
364
|
-
// Never infer from
|
|
365
|
-
//
|
|
364
|
+
// Never infer from proposed controls or options. Only an observed native adapter
|
|
365
|
+
// request establishes the documented scheduling budget.
|
|
366
366
|
const policy = input.effectivePolicy;
|
|
367
|
+
if (policy?.provider === 'openai') {
|
|
368
|
+
const budget = openAiCacheBudget(policy);
|
|
369
|
+
return budget ? withDuration(budget.durationMs, 'openai', budget.basis) : observation;
|
|
370
|
+
}
|
|
367
371
|
if (policy?.provider !== 'anthropic' || policy.controls.length === 0)
|
|
368
372
|
return observation;
|
|
369
373
|
const durations = [];
|
|
@@ -377,7 +381,23 @@ export function observeSmartAiCacheDispatch(input) {
|
|
|
377
381
|
else
|
|
378
382
|
return observation;
|
|
379
383
|
}
|
|
380
|
-
|
|
384
|
+
const duration = Math.min(...durations);
|
|
385
|
+
return withDuration(duration, 'anthropic', duration === 300_000 ? 'anthropic-5m' : 'anthropic-1h');
|
|
386
|
+
}
|
|
387
|
+
/** The documented lifetime of a sent OpenAI request's cache; see `TSmartAiCacheBudgetBasis`. */
|
|
388
|
+
function openAiCacheBudget(policy) {
|
|
389
|
+
const inMemory = { durationMs: 300_000, basis: 'openai-in-memory' };
|
|
390
|
+
if (policy.endpoint === 'chatgpt')
|
|
391
|
+
return inMemory;
|
|
392
|
+
if (openAiRoutesPromptCacheAutomatically(policy.model)) {
|
|
393
|
+
return policy.ttl === undefined || policy.ttl === '30m'
|
|
394
|
+
? { durationMs: 1_800_000, basis: 'openai-30m' }
|
|
395
|
+
: undefined;
|
|
396
|
+
}
|
|
397
|
+
if (policy.retention === '24h')
|
|
398
|
+
return { durationMs: 1_800_000, basis: 'openai-24h' };
|
|
399
|
+
// Without a retention the organization's default applies, in memory under Zero Data Retention.
|
|
400
|
+
return policy.retention === undefined || policy.retention === 'in_memory' ? inMemory : undefined;
|
|
381
401
|
}
|
|
382
402
|
/** Bound one wait; reserve up to one second (10% for short budgets) for the next boundary. */
|
|
383
403
|
export function getSmartAiCacheWaitMs(requestedMs, dispatch, now = Date.now()) {
|
|
@@ -403,4 +423,4 @@ export function getSmartAiCacheWaitMs(requestedMs, dispatch, now = Date.now()) {
|
|
|
403
423
|
const headroom = Math.min(1000, Math.ceil(dispatch.warmDurationMs / 10));
|
|
404
424
|
return Math.max(0, Math.min(maximum, Math.floor(dispatch.idleDeadline - now - headroom)));
|
|
405
425
|
}
|
|
406
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX21vZGVscy9zbWFydGFpLmNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFEQSxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFFBQTRCLEVBQUUsU0FBOEI7SUFDckYsTUFBTSxNQUFNLEdBQXVCLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUVuRCxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRTlCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxRQUE4QixFQUFFLEtBQTJCLENBQUMsQ0FBQztZQUM3RixTQUFTO1FBQ1gsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUEwQixDQUFDO0lBQzNDLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxRQUFrQyxFQUNsQyxTQUFtQztJQUVuQyxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDaEMsT0FBTyxpQkFBaUIs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
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX21vZGVscy9zbWFydGFpLmNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFEQSxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFFBQTRCLEVBQUUsU0FBOEI7SUFDckYsTUFBTSxNQUFNLEdBQXVCLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUVuRCxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRTlCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxRQUE4QixFQUFFLEtBQTJCLENBQUMsQ0FBQztZQUM3RixTQUFTO1FBQ1gsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUEwQixDQUFDO0lBQzNDLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxRQUFrQyxFQUNsQyxTQUFtQztJQUVuQyxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDaEMsT0FBTyxpQkFBaUIs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
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"author": "Task Venture Capital GmbH",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"name": "@modelprofile.com/flexharness-models",
|
|
5
|
-
"version": "13.
|
|
5
|
+
"version": "13.2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"description": "Provider-independent model contracts, prompt caching and explicit model registration.",
|
|
8
8
|
"main": "./dist_ts_models/index.js",
|
|
@@ -476,6 +476,29 @@ export function applySmartAiCacheProviderOptions(input: {
|
|
|
476
476
|
);
|
|
477
477
|
}
|
|
478
478
|
|
|
479
|
+
/**
|
|
480
|
+
* What an idle budget rests on:
|
|
481
|
+
* - `configured`: `cache.warmDurationMs`.
|
|
482
|
+
* - `anthropic-5m`, `anthropic-1h`: the shortest `cache_control` lifetime of the sent request.
|
|
483
|
+
* - `openai-30m`: GPT-5.6 and later on OpenAI's API, whose `prompt_cache_options.ttl` is 30 minutes
|
|
484
|
+
* after the last write or reuse.
|
|
485
|
+
* - `openai-24h`: `prompt_cache_retention: '24h'` sent to an earlier model on OpenAI's API, which
|
|
486
|
+
* typically keeps the prefix around 30 minutes and up to 24 hours, without promising more.
|
|
487
|
+
* - `openai-in-memory`: an earlier model on OpenAI's API with `in_memory` or no retention sent, or
|
|
488
|
+
* any model on the ChatGPT backend, which takes no retention and documents none: in-memory
|
|
489
|
+
* entries last 5 to 10 minutes of inactivity.
|
|
490
|
+
*
|
|
491
|
+
* OpenAI's documentation: https://developers.openai.com/api/docs/guides/prompt-caching, read
|
|
492
|
+
* 2026-10-11. No basis promises a hit.
|
|
493
|
+
*/
|
|
494
|
+
export type TSmartAiCacheBudgetBasis =
|
|
495
|
+
| 'configured'
|
|
496
|
+
| 'anthropic-5m'
|
|
497
|
+
| 'anthropic-1h'
|
|
498
|
+
| 'openai-30m'
|
|
499
|
+
| 'openai-24h'
|
|
500
|
+
| 'openai-in-memory';
|
|
501
|
+
|
|
479
502
|
/** Observation at the model dispatch boundary; no field certifies a cache write or hit. */
|
|
480
503
|
export interface ISmartAiCacheDispatch {
|
|
481
504
|
dispatchedAt: number;
|
|
@@ -483,19 +506,36 @@ export interface ISmartAiCacheDispatch {
|
|
|
483
506
|
warmDurationMs?: number;
|
|
484
507
|
/** Epoch milliseconds measured from dispatch, never from the start of a wait. */
|
|
485
508
|
idleDeadline?: number;
|
|
486
|
-
source?: 'configured' | 'anthropic';
|
|
509
|
+
source?: 'configured' | 'anthropic' | 'openai';
|
|
510
|
+
/** Present with `warmDurationMs`: what the budget rests on. */
|
|
511
|
+
basis?: TSmartAiCacheBudgetBasis;
|
|
487
512
|
}
|
|
488
513
|
|
|
489
|
-
/**
|
|
514
|
+
/** Anthropic cache controls emitted by the owning adapter, not proposed prompt/provider options. */
|
|
490
515
|
export interface ISmartAiEffectiveCachePolicy {
|
|
491
516
|
provider: 'anthropic';
|
|
492
517
|
controls: readonly unknown[];
|
|
493
518
|
}
|
|
494
519
|
|
|
520
|
+
/** The cache settings of a serialized OpenAI request, as the owning adapter sent it. */
|
|
521
|
+
export interface ISmartAiOpenAiEffectiveCachePolicy {
|
|
522
|
+
provider: 'openai';
|
|
523
|
+
/** `api`: OpenAI's API. `chatgpt`: the ChatGPT Codex backend of ChatGPT accounts. */
|
|
524
|
+
endpoint: 'api' | 'chatgpt';
|
|
525
|
+
/** The request's `model`. */
|
|
526
|
+
model: string;
|
|
527
|
+
/** The request's `prompt_cache_retention`, when sent. */
|
|
528
|
+
retention?: unknown;
|
|
529
|
+
/** The request's `prompt_cache_options.ttl`, when sent. */
|
|
530
|
+
ttl?: unknown;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
export type TSmartAiEffectiveCachePolicy = ISmartAiEffectiveCachePolicy | ISmartAiOpenAiEffectiveCachePolicy;
|
|
534
|
+
|
|
495
535
|
export interface ISmartAiCachePolicyObservation {
|
|
496
536
|
dispatchedAt: number;
|
|
497
537
|
/** Absent when the final adapter/transport policy cannot be confirmed. */
|
|
498
|
-
policy?:
|
|
538
|
+
policy?: TSmartAiEffectiveCachePolicy;
|
|
499
539
|
}
|
|
500
540
|
|
|
501
541
|
export type TSmartAiCachePolicyObserver = (observation: ISmartAiCachePolicyObservation) => void;
|
|
@@ -525,16 +565,20 @@ export function bindSmartAiCachePolicyObserver(
|
|
|
525
565
|
export function observeSmartAiCacheDispatch(input: {
|
|
526
566
|
cache?: TSmartAiCacheSetting;
|
|
527
567
|
dispatchedAt: number;
|
|
528
|
-
effectivePolicy?:
|
|
568
|
+
effectivePolicy?: TSmartAiEffectiveCachePolicy;
|
|
529
569
|
}): ISmartAiCacheDispatch {
|
|
530
570
|
if (!Number.isSafeInteger(input.dispatchedAt) || input.dispatchedAt < 0) {
|
|
531
571
|
throw new Error('Cache dispatch time must be a non-negative safe integer.');
|
|
532
572
|
}
|
|
533
573
|
const observation: ISmartAiCacheDispatch = { dispatchedAt: input.dispatchedAt };
|
|
534
|
-
const withDuration = (
|
|
574
|
+
const withDuration = (
|
|
575
|
+
warmDurationMs: number,
|
|
576
|
+
source: NonNullable<ISmartAiCacheDispatch['source']>,
|
|
577
|
+
basis: TSmartAiCacheBudgetBasis,
|
|
578
|
+
): ISmartAiCacheDispatch => {
|
|
535
579
|
const idleDeadline = input.dispatchedAt + warmDurationMs;
|
|
536
580
|
if (!Number.isSafeInteger(idleDeadline)) throw new Error('Cache idle deadline exceeds the safe integer range.');
|
|
537
|
-
return { ...observation, warmDurationMs, idleDeadline, source };
|
|
581
|
+
return { ...observation, warmDurationMs, idleDeadline, source, basis };
|
|
538
582
|
};
|
|
539
583
|
const cache = cacheOptionsFromSetting(input.cache);
|
|
540
584
|
if (!cache) return observation;
|
|
@@ -542,11 +586,15 @@ export function observeSmartAiCacheDispatch(input: {
|
|
|
542
586
|
if (!Number.isSafeInteger(cache.warmDurationMs) || cache.warmDurationMs <= 0) {
|
|
543
587
|
throw new Error('cache.warmDurationMs must be a positive safe integer.');
|
|
544
588
|
}
|
|
545
|
-
return withDuration(cache.warmDurationMs, 'configured');
|
|
589
|
+
return withDuration(cache.warmDurationMs, 'configured', 'configured');
|
|
546
590
|
}
|
|
547
|
-
// Never infer from
|
|
548
|
-
//
|
|
591
|
+
// Never infer from proposed controls or options. Only an observed native adapter
|
|
592
|
+
// request establishes the documented scheduling budget.
|
|
549
593
|
const policy = input.effectivePolicy;
|
|
594
|
+
if (policy?.provider === 'openai') {
|
|
595
|
+
const budget = openAiCacheBudget(policy);
|
|
596
|
+
return budget ? withDuration(budget.durationMs, 'openai', budget.basis) : observation;
|
|
597
|
+
}
|
|
550
598
|
if (policy?.provider !== 'anthropic' || policy.controls.length === 0) return observation;
|
|
551
599
|
const durations: number[] = [];
|
|
552
600
|
for (const control of policy.controls) {
|
|
@@ -555,7 +603,24 @@ export function observeSmartAiCacheDispatch(input: {
|
|
|
555
603
|
else if (control.ttl === '1h') durations.push(3_600_000);
|
|
556
604
|
else return observation;
|
|
557
605
|
}
|
|
558
|
-
|
|
606
|
+
const duration = Math.min(...durations);
|
|
607
|
+
return withDuration(duration, 'anthropic', duration === 300_000 ? 'anthropic-5m' : 'anthropic-1h');
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/** The documented lifetime of a sent OpenAI request's cache; see `TSmartAiCacheBudgetBasis`. */
|
|
611
|
+
function openAiCacheBudget(
|
|
612
|
+
policy: ISmartAiOpenAiEffectiveCachePolicy,
|
|
613
|
+
): { durationMs: number; basis: TSmartAiCacheBudgetBasis } | undefined {
|
|
614
|
+
const inMemory = { durationMs: 300_000, basis: 'openai-in-memory' } as const;
|
|
615
|
+
if (policy.endpoint === 'chatgpt') return inMemory;
|
|
616
|
+
if (openAiRoutesPromptCacheAutomatically(policy.model)) {
|
|
617
|
+
return policy.ttl === undefined || policy.ttl === '30m'
|
|
618
|
+
? { durationMs: 1_800_000, basis: 'openai-30m' }
|
|
619
|
+
: undefined;
|
|
620
|
+
}
|
|
621
|
+
if (policy.retention === '24h') return { durationMs: 1_800_000, basis: 'openai-24h' };
|
|
622
|
+
// Without a retention the organization's default applies, in memory under Zero Data Retention.
|
|
623
|
+
return policy.retention === undefined || policy.retention === 'in_memory' ? inMemory : undefined;
|
|
559
624
|
}
|
|
560
625
|
|
|
561
626
|
/** Bound one wait; reserve up to one second (10% for short budgets) for the next boundary. */
|