@cogenta/agents 0.4.0 → 0.5.1
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/agents/orchestrator.d.ts +3 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +1 -0
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/progress/job-store.d.ts +50 -0
- package/dist/progress/job-store.d.ts.map +1 -0
- package/dist/progress/job-store.js +47 -0
- package/dist/progress/job-store.js.map +1 -0
- package/dist/progress/types.d.ts +21 -0
- package/dist/progress/types.d.ts.map +1 -0
- package/dist/progress/types.js +3 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts +9 -4
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +10 -10
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/catalog.d.ts +14 -0
- package/dist/providers/catalog.d.ts.map +1 -1
- package/dist/providers/catalog.js +1 -0
- package/dist/providers/catalog.js.map +1 -1
- package/dist/providers/defaults.d.ts +41 -12
- package/dist/providers/defaults.d.ts.map +1 -1
- package/dist/providers/defaults.js +70 -13
- package/dist/providers/defaults.js.map +1 -1
- package/dist/providers/google.d.ts +7 -3
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +9 -10
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/openai.d.ts +30 -4
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +12 -12
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +8 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +21 -4
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/request-signal.d.ts +12 -17
- package/dist/providers/request-signal.d.ts.map +1 -1
- package/dist/providers/request-signal.js +12 -17
- package/dist/providers/request-signal.js.map +1 -1
- package/dist/providers/types.d.ts +19 -10
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/runtime/loop.d.ts.map +1 -1
- package/dist/runtime/loop.js +13 -6
- package/dist/runtime/loop.js.map +1 -1
- package/dist/runtime/retry.d.ts +2 -0
- package/dist/runtime/retry.d.ts.map +1 -1
- package/dist/runtime/retry.js +1 -0
- package/dist/runtime/retry.js.map +1 -1
- package/dist/runtime/types.d.ts +12 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/site-plan/analyse-brief.d.ts.map +1 -1
- package/dist/site-plan/analyse-brief.js +1 -3
- package/dist/site-plan/analyse-brief.js.map +1 -1
- package/dist/site-plan/content-model.d.ts.map +1 -1
- package/dist/site-plan/content-model.js +1 -3
- package/dist/site-plan/content-model.js.map +1 -1
- package/dist/site-plan/demo-content.d.ts.map +1 -1
- package/dist/site-plan/demo-content.js +1 -3
- package/dist/site-plan/demo-content.js.map +1 -1
- package/dist/site-plan/skin-candidates.d.ts +6 -1
- package/dist/site-plan/skin-candidates.d.ts.map +1 -1
- package/dist/site-plan/skin-candidates.js +9 -0
- package/dist/site-plan/skin-candidates.js.map +1 -1
- package/dist/skin/generate.d.ts +14 -1
- package/dist/skin/generate.d.ts.map +1 -1
- package/dist/skin/generate.js +28 -12
- package/dist/skin/generate.js.map +1 -1
- package/dist/theme-creator/propose-theme.d.ts +12 -6
- package/dist/theme-creator/propose-theme.d.ts.map +1 -1
- package/dist/theme-creator/propose-theme.js +27 -19
- package/dist/theme-creator/propose-theme.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/providers/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/providers/defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,iBAAiB,EAAoB,MAAM,iBAAiB,CAAA;AAEpG;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;CACvC;AAsCD;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAWjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAMrE"}
|
|
@@ -1,15 +1,72 @@
|
|
|
1
|
+
import { CogentaError } from '@cogenta/core';
|
|
2
|
+
import { SITE_SETTINGS_SITE_SCOPE, siteSettingByKey } from '@cogenta/schema';
|
|
3
|
+
const MAX_OUTPUT_TOKENS_KEY = 'assistant.defaultMaxOutputTokens';
|
|
4
|
+
const REQUEST_TIMEOUT_SECONDS_KEY = 'assistant.defaultRequestTimeoutSeconds';
|
|
5
|
+
const MAX_CORRECTION_ATTEMPTS_KEY = 'assistant.defaultMaxCorrectionAttempts';
|
|
1
6
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
* The registry's own declared default for a numeric setting
|
|
8
|
+
* (`SITE_SETTINGS_REGISTRY`'s own `defaultValue`) — the single place either
|
|
9
|
+
* reader below gets a fallback number from, never a second copy kept in this
|
|
10
|
+
* package. Throwing here is not reachable in practice (the three keys this
|
|
11
|
+
* file reads are declared with a numeric `defaultValue` in
|
|
12
|
+
* `site-settings-registry.ts`); it exists because neither caller has any way
|
|
13
|
+
* to prove that from its own call site, and a silent fallback to some other
|
|
14
|
+
* literal here would be exactly the hardcoding this file exists to avoid.
|
|
15
|
+
*/
|
|
16
|
+
function registryDefaultValue(key) {
|
|
17
|
+
const definition = siteSettingByKey(key);
|
|
18
|
+
if (definition !== undefined && typeof definition.defaultValue === 'number') {
|
|
19
|
+
return definition.defaultValue;
|
|
20
|
+
}
|
|
21
|
+
throw new CogentaError({
|
|
22
|
+
code: 'SITE_SETTING_INVALID',
|
|
23
|
+
message: `Site setting "${key}" has no numeric default registered.`,
|
|
24
|
+
hint: 'This is a registry bug — check the entry in SITE_SETTINGS_REGISTRY.',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A row exists only once an admin has actually written this key
|
|
29
|
+
* (`SiteSettingsStore`'s own contract) — absent means "use the registry's
|
|
30
|
+
* own `defaultValue`" (`registryDefaultValue` above).
|
|
31
|
+
*/
|
|
32
|
+
async function resolveNumberSetting(store, key) {
|
|
33
|
+
const row = await store.get(key, SITE_SETTINGS_SITE_SCOPE);
|
|
34
|
+
return row !== null && typeof row.value === 'number' ? row.value : registryDefaultValue(key);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Reads the three `assistant.*` site settings and turns them into the shape
|
|
38
|
+
* every resolved provider client needs — the CLI wiring layer's own
|
|
39
|
+
* responsibility (`cogenta serve`, `packages/cli/src/commands/agent-runtime
|
|
40
|
+
* .ts`), exposed here so it never has to re-derive the key names or the
|
|
41
|
+
* seconds-to-milliseconds conversion itself.
|
|
42
|
+
*/
|
|
43
|
+
export async function resolveProviderTuningDefaults(store) {
|
|
44
|
+
const [maxOutputTokens, requestTimeoutSeconds, maxCorrectionAttempts] = await Promise.all([
|
|
45
|
+
resolveNumberSetting(store, MAX_OUTPUT_TOKENS_KEY),
|
|
46
|
+
resolveNumberSetting(store, REQUEST_TIMEOUT_SECONDS_KEY),
|
|
47
|
+
resolveNumberSetting(store, MAX_CORRECTION_ATTEMPTS_KEY),
|
|
48
|
+
]);
|
|
49
|
+
return {
|
|
50
|
+
maxOutputTokens,
|
|
51
|
+
requestTimeoutMs: requestTimeoutSeconds * 1000,
|
|
52
|
+
maxCorrectionAttempts,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The registry's own defaults with no live per-site override consulted at
|
|
57
|
+
* all — for the one caller with no `SiteSettingsStore` to read from in the
|
|
58
|
+
* first place: `cogenta skin generate`, a one-shot CLI command that works
|
|
59
|
+
* straight off `cogenta.config.mjs` and already bypasses every other
|
|
60
|
+
* admin-configured override (`ProviderConfigStore`'s own per-provider
|
|
61
|
+
* tuning included) rather than a running site's database. Still the single
|
|
62
|
+
* declared number (`SITE_SETTINGS_REGISTRY`'s own `defaultValue`), never a
|
|
63
|
+
* second constant duplicated for this one caller.
|
|
64
|
+
*/
|
|
65
|
+
export function staticProviderTuningDefaults() {
|
|
66
|
+
return {
|
|
67
|
+
maxOutputTokens: registryDefaultValue(MAX_OUTPUT_TOKENS_KEY),
|
|
68
|
+
requestTimeoutMs: registryDefaultValue(REQUEST_TIMEOUT_SECONDS_KEY) * 1000,
|
|
69
|
+
maxCorrectionAttempts: registryDefaultValue(MAX_CORRECTION_ATTEMPTS_KEY),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
15
72
|
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/providers/defaults.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/providers/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAA0B,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AA0BpG,MAAM,qBAAqB,GAAG,kCAAkC,CAAA;AAChE,MAAM,2BAA2B,GAAG,wCAAwC,CAAA;AAC5E,MAAM,2BAA2B,GAAG,wCAAwC,CAAA;AAE5E;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO,UAAU,CAAC,YAAY,CAAA;IAChC,CAAC;IACD,MAAM,IAAI,YAAY,CAAC;QACrB,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,iBAAiB,GAAG,sCAAsC;QACnE,IAAI,EAAE,qEAAqE;KAC5E,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CAAC,KAAwB,EAAE,GAAW;IACvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAA;IAC1D,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAA;AAC9F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,KAAwB;IAExB,MAAM,CAAC,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxF,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,CAAC;QAClD,oBAAoB,CAAC,KAAK,EAAE,2BAA2B,CAAC;QACxD,oBAAoB,CAAC,KAAK,EAAE,2BAA2B,CAAC;KACzD,CAAC,CAAA;IACF,OAAO;QACL,eAAe;QACf,gBAAgB,EAAE,qBAAqB,GAAG,IAAI;QAC9C,qBAAqB;KACtB,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,eAAe,EAAE,oBAAoB,CAAC,qBAAqB,CAAC;QAC5D,gBAAgB,EAAE,oBAAoB,CAAC,2BAA2B,CAAC,GAAG,IAAI;QAC1E,qBAAqB,EAAE,oBAAoB,CAAC,2BAA2B,CAAC;KACzE,CAAA;AACH,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ProviderTuningDefaults } from './defaults.js';
|
|
1
2
|
import type { ChatRequest, ChatResponse, ProviderClient } from './types.js';
|
|
2
3
|
type GooglePart = {
|
|
3
4
|
readonly text: string;
|
|
@@ -54,10 +55,11 @@ interface GoogleResponseBody {
|
|
|
54
55
|
}
|
|
55
56
|
/**
|
|
56
57
|
* Pure — no network. `fallbackMaxTokens` is the client's own resolved
|
|
57
|
-
* `maxOutputTokens` (the admin's per-provider value, or the
|
|
58
|
-
* — applied only when `request.maxTokens` itself is absent.
|
|
58
|
+
* `maxOutputTokens` (the admin's per-provider value, or the site-wide
|
|
59
|
+
* default) — applied only when `request.maxTokens` itself is absent.
|
|
60
|
+
* Required, not defaulted — see `buildAnthropicRequest`'s own doc comment.
|
|
59
61
|
*/
|
|
60
|
-
export declare function buildGoogleRequest(request: ChatRequest, fallbackMaxTokens
|
|
62
|
+
export declare function buildGoogleRequest(request: ChatRequest, fallbackMaxTokens: number): GoogleRequestBody;
|
|
61
63
|
/** Pure — no network. */
|
|
62
64
|
export declare function parseGoogleResponse(body: GoogleResponseBody, decodeToolName?: (wire: string) => string): ChatResponse;
|
|
63
65
|
export interface GoogleClientConfig {
|
|
@@ -69,6 +71,8 @@ export interface GoogleClientConfig {
|
|
|
69
71
|
readonly maxOutputTokens?: number;
|
|
70
72
|
readonly requestTimeoutMs?: number;
|
|
71
73
|
readonly maxCorrectionAttempts?: number;
|
|
74
|
+
/** The site-wide floor (`resolveProviderTuningDefaults`, `assistant.*` site settings) — always required, never a built-in constant. */
|
|
75
|
+
readonly defaults: ProviderTuningDefaults;
|
|
72
76
|
}
|
|
73
77
|
/** API key injected at the runtime boundary — never in a prompt or tool input (rule R7). */
|
|
74
78
|
export declare function createGoogleClient(config: GoogleClientConfig): ProviderClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/google.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { CogentaError } from '@cogenta/core';
|
|
2
2
|
import { textOnlyContent } from './content-parts.js';
|
|
3
|
-
import {
|
|
4
|
-
import { DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS, requestSignalWithTimeout } from './request-signal.js';
|
|
3
|
+
import { requestSignalWithTimeout } from './request-signal.js';
|
|
5
4
|
import { createToolNameDecoder, encodeToolName } from './tool-names.js';
|
|
6
5
|
const DEFAULT_BASE_URL = 'https://generativelanguage.googleapis.com/v1beta/models';
|
|
7
6
|
const STOP_REASON = {
|
|
@@ -61,10 +60,11 @@ function toGoogleContent(message) {
|
|
|
61
60
|
}
|
|
62
61
|
/**
|
|
63
62
|
* Pure — no network. `fallbackMaxTokens` is the client's own resolved
|
|
64
|
-
* `maxOutputTokens` (the admin's per-provider value, or the
|
|
65
|
-
* — applied only when `request.maxTokens` itself is absent.
|
|
63
|
+
* `maxOutputTokens` (the admin's per-provider value, or the site-wide
|
|
64
|
+
* default) — applied only when `request.maxTokens` itself is absent.
|
|
65
|
+
* Required, not defaulted — see `buildAnthropicRequest`'s own doc comment.
|
|
66
66
|
*/
|
|
67
|
-
export function buildGoogleRequest(request, fallbackMaxTokens
|
|
67
|
+
export function buildGoogleRequest(request, fallbackMaxTokens) {
|
|
68
68
|
return {
|
|
69
69
|
contents: request.messages.map(toGoogleContent),
|
|
70
70
|
...(request.system === undefined
|
|
@@ -129,17 +129,16 @@ export function createGoogleClient(config) {
|
|
|
129
129
|
const doFetch = config.fetchImpl ?? fetch;
|
|
130
130
|
const base = config.baseUrl ?? DEFAULT_BASE_URL;
|
|
131
131
|
const url = `${base}/${config.model}:generateContent?key=${config.apiKey}`;
|
|
132
|
-
const maxOutputTokens = config.maxOutputTokens ??
|
|
133
|
-
const requestTimeoutMs = config.requestTimeoutMs ??
|
|
132
|
+
const maxOutputTokens = config.maxOutputTokens ?? config.defaults.maxOutputTokens;
|
|
133
|
+
const requestTimeoutMs = config.requestTimeoutMs ?? config.defaults.requestTimeoutMs;
|
|
134
|
+
const maxCorrectionAttempts = config.maxCorrectionAttempts ?? config.defaults.maxCorrectionAttempts;
|
|
134
135
|
return {
|
|
135
136
|
name: 'google',
|
|
136
137
|
model: config.model,
|
|
137
138
|
supportsVision: true,
|
|
138
139
|
maxOutputTokens,
|
|
139
140
|
requestTimeoutMs,
|
|
140
|
-
|
|
141
|
-
? {}
|
|
142
|
-
: { maxCorrectionAttempts: config.maxCorrectionAttempts }),
|
|
141
|
+
maxCorrectionAttempts,
|
|
143
142
|
async chat(request, options) {
|
|
144
143
|
const signal = requestSignalWithTimeout(options?.signal, requestTimeoutMs);
|
|
145
144
|
const response = await doFetch(url, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ProviderTuningDefaults } from './defaults.js';
|
|
1
2
|
import type { ChatRequest, ChatResponse, ProviderClient } from './types.js';
|
|
2
3
|
interface OpenAiToolCall {
|
|
3
4
|
readonly id: string;
|
|
@@ -24,7 +25,21 @@ interface OpenAiMessage {
|
|
|
24
25
|
}
|
|
25
26
|
export interface OpenAiRequestBody {
|
|
26
27
|
readonly model: string;
|
|
27
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Exactly one of `max_tokens`/`max_completion_tokens` is ever set — never
|
|
30
|
+
* both — because OpenAI's own reasoning-tier models (o1, o3, and this
|
|
31
|
+
* catalog's gpt-5 family) reject a request carrying `max_tokens` outright
|
|
32
|
+
* (400 `Unsupported parameter`), rather than merely ignoring it. Which one
|
|
33
|
+
* a given request carries is decided by `buildOpenAiRequest`'s
|
|
34
|
+
* `useMaxCompletionTokens` parameter, itself driven by
|
|
35
|
+
* `ProviderCatalogEntry.usesMaxCompletionTokens` — `true` only for the
|
|
36
|
+
* `openai` catalog entry (fiche feedback, 2026-09-07: confirmed live
|
|
37
|
+
* against a real `gpt-5-mini` key). Every other `openai-compatible` vendor
|
|
38
|
+
* (OpenRouter, DeepSeek, Qwen, GLM, a custom endpoint) still speaks the
|
|
39
|
+
* older, more widely cloned `max_tokens` field.
|
|
40
|
+
*/
|
|
41
|
+
readonly max_tokens?: number;
|
|
42
|
+
readonly max_completion_tokens?: number;
|
|
28
43
|
readonly messages: readonly OpenAiMessage[];
|
|
29
44
|
readonly tools?: readonly {
|
|
30
45
|
readonly type: 'function';
|
|
@@ -51,10 +66,11 @@ interface OpenAiResponseBody {
|
|
|
51
66
|
}
|
|
52
67
|
/**
|
|
53
68
|
* Pure — no network. `fallbackMaxTokens` is the client's own resolved
|
|
54
|
-
* `maxOutputTokens` (the admin's per-provider value, or the
|
|
55
|
-
* — applied only when `request.maxTokens` itself is absent.
|
|
69
|
+
* `maxOutputTokens` (the admin's per-provider value, or the site-wide
|
|
70
|
+
* default) — applied only when `request.maxTokens` itself is absent.
|
|
71
|
+
* Required, not defaulted — see `buildAnthropicRequest`'s own doc comment.
|
|
56
72
|
*/
|
|
57
|
-
export declare function buildOpenAiRequest(request: ChatRequest, fallbackMaxTokens?:
|
|
73
|
+
export declare function buildOpenAiRequest(request: ChatRequest, fallbackMaxTokens: number, useMaxCompletionTokens?: boolean): OpenAiRequestBody;
|
|
58
74
|
/** Pure — no network. */
|
|
59
75
|
export declare function parseOpenAiResponse(body: OpenAiResponseBody, decodeToolName?: (wire: string) => string): ChatResponse;
|
|
60
76
|
export interface OpenAiClientConfig {
|
|
@@ -73,10 +89,20 @@ export interface OpenAiClientConfig {
|
|
|
73
89
|
* this machine" policy scoped to a different vendor.
|
|
74
90
|
*/
|
|
75
91
|
readonly name?: string;
|
|
92
|
+
/**
|
|
93
|
+
* `true` sends `max_completion_tokens` instead of `max_tokens` — set for
|
|
94
|
+
* an `openai-compatible` vendor whose endpoint rejects the older field
|
|
95
|
+
* outright (`catalog.ts`'s `ProviderCatalogEntry.usesMaxCompletionTokens`,
|
|
96
|
+
* currently only the genuine `openai` entry). Left unset, a client builds
|
|
97
|
+
* its request exactly as it did before this field existed.
|
|
98
|
+
*/
|
|
99
|
+
readonly usesMaxCompletionTokens?: boolean;
|
|
76
100
|
/** See `ProviderClient.maxOutputTokens`/`requestTimeoutMs`/`maxCorrectionAttempts`. */
|
|
77
101
|
readonly maxOutputTokens?: number;
|
|
78
102
|
readonly requestTimeoutMs?: number;
|
|
79
103
|
readonly maxCorrectionAttempts?: number;
|
|
104
|
+
/** The site-wide floor (`resolveProviderTuningDefaults`, `assistant.*` site settings) — always required, never a built-in constant. */
|
|
105
|
+
readonly defaults: ProviderTuningDefaults;
|
|
80
106
|
}
|
|
81
107
|
/** API key injected at the runtime boundary — never in a prompt or tool input (rule R7). */
|
|
82
108
|
export declare function createOpenAiClient(config: OpenAiClientConfig): ProviderClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/openai.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { CogentaError } from '@cogenta/core';
|
|
2
2
|
import { textOnlyContent } from './content-parts.js';
|
|
3
|
-
import {
|
|
4
|
-
import { DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS, requestSignalWithTimeout } from './request-signal.js';
|
|
3
|
+
import { requestSignalWithTimeout } from './request-signal.js';
|
|
5
4
|
import { createToolNameDecoder, encodeToolName } from './tool-names.js';
|
|
6
5
|
const DEFAULT_BASE_URL = 'https://api.openai.com/v1/chat/completions';
|
|
7
6
|
const STOP_REASON = {
|
|
@@ -61,18 +60,20 @@ function toOpenAiMessage(message) {
|
|
|
61
60
|
}
|
|
62
61
|
/**
|
|
63
62
|
* Pure — no network. `fallbackMaxTokens` is the client's own resolved
|
|
64
|
-
* `maxOutputTokens` (the admin's per-provider value, or the
|
|
65
|
-
* — applied only when `request.maxTokens` itself is absent.
|
|
63
|
+
* `maxOutputTokens` (the admin's per-provider value, or the site-wide
|
|
64
|
+
* default) — applied only when `request.maxTokens` itself is absent.
|
|
65
|
+
* Required, not defaulted — see `buildAnthropicRequest`'s own doc comment.
|
|
66
66
|
*/
|
|
67
|
-
export function buildOpenAiRequest(request, fallbackMaxTokens =
|
|
67
|
+
export function buildOpenAiRequest(request, fallbackMaxTokens, useMaxCompletionTokens = false) {
|
|
68
68
|
const messages = [];
|
|
69
69
|
if (request.system !== undefined) {
|
|
70
70
|
messages.push({ role: 'system', content: request.system });
|
|
71
71
|
}
|
|
72
72
|
messages.push(...request.messages.map(toOpenAiMessage));
|
|
73
|
+
const maxTokens = request.maxTokens ?? fallbackMaxTokens;
|
|
73
74
|
return {
|
|
74
75
|
model: request.model,
|
|
75
|
-
max_tokens:
|
|
76
|
+
...(useMaxCompletionTokens ? { max_completion_tokens: maxTokens } : { max_tokens: maxTokens }),
|
|
76
77
|
messages,
|
|
77
78
|
...(request.tools === undefined
|
|
78
79
|
? {}
|
|
@@ -167,17 +168,16 @@ export function createOpenAiClient(config) {
|
|
|
167
168
|
const doFetch = config.fetchImpl ?? fetch;
|
|
168
169
|
const url = config.baseUrl ?? DEFAULT_BASE_URL;
|
|
169
170
|
const name = config.name ?? 'openai';
|
|
170
|
-
const maxOutputTokens = config.maxOutputTokens ??
|
|
171
|
-
const requestTimeoutMs = config.requestTimeoutMs ??
|
|
171
|
+
const maxOutputTokens = config.maxOutputTokens ?? config.defaults.maxOutputTokens;
|
|
172
|
+
const requestTimeoutMs = config.requestTimeoutMs ?? config.defaults.requestTimeoutMs;
|
|
173
|
+
const maxCorrectionAttempts = config.maxCorrectionAttempts ?? config.defaults.maxCorrectionAttempts;
|
|
172
174
|
return {
|
|
173
175
|
name,
|
|
174
176
|
model: config.model,
|
|
175
177
|
supportsVision: true,
|
|
176
178
|
maxOutputTokens,
|
|
177
179
|
requestTimeoutMs,
|
|
178
|
-
|
|
179
|
-
? {}
|
|
180
|
-
: { maxCorrectionAttempts: config.maxCorrectionAttempts }),
|
|
180
|
+
maxCorrectionAttempts,
|
|
181
181
|
async chat(request, options) {
|
|
182
182
|
const signal = requestSignalWithTimeout(options?.signal, requestTimeoutMs);
|
|
183
183
|
const response = await doFetch(url, {
|
|
@@ -186,7 +186,7 @@ export function createOpenAiClient(config) {
|
|
|
186
186
|
'content-type': 'application/json',
|
|
187
187
|
authorization: `Bearer ${config.apiKey}`,
|
|
188
188
|
},
|
|
189
|
-
body: JSON.stringify(buildOpenAiRequest(request, maxOutputTokens)),
|
|
189
|
+
body: JSON.stringify(buildOpenAiRequest(request, maxOutputTokens, config.usesMaxCompletionTokens ?? false)),
|
|
190
190
|
signal,
|
|
191
191
|
}).catch((cause) => {
|
|
192
192
|
if (signal.aborted && options?.signal?.aborted !== true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ProviderTuningDefaults } from './defaults.js';
|
|
1
2
|
import type { ProviderClient } from './types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Fiche 56: `provider` used to be a closed 3-literal union
|
|
@@ -21,7 +22,7 @@ export interface ProviderEntryConfig {
|
|
|
21
22
|
* `buildClient` below).
|
|
22
23
|
*/
|
|
23
24
|
readonly baseUrl?: string;
|
|
24
|
-
/** See `ProviderClient.maxOutputTokens` — the admin's value for this provider, or absent
|
|
25
|
+
/** See `ProviderClient.maxOutputTokens` — the admin's value for this provider, or absent to fall back to the registry's own `defaults`. */
|
|
25
26
|
readonly maxOutputTokens?: number;
|
|
26
27
|
/** See `ProviderClient.requestTimeoutMs`. */
|
|
27
28
|
readonly requestTimeoutMs?: number;
|
|
@@ -34,8 +35,13 @@ export type ProviderRegistryConfig = Readonly<Record<string, ProviderEntryConfig
|
|
|
34
35
|
* simply has an empty registry, which is exactly what rule R2 requires ("le
|
|
35
36
|
* CMS fonctionne sans IA"): nothing here fails to construct, `get()` is what
|
|
36
37
|
* refuses, and only once an agent actually tries to run.
|
|
38
|
+
*
|
|
39
|
+
* `defaults` is the site-wide tuning floor (`resolveProviderTuningDefaults`,
|
|
40
|
+
* `assistant.*` site settings) every entry's own per-provider override falls
|
|
41
|
+
* back to — required, so no adapter this registry builds can ever fall back
|
|
42
|
+
* to a hardcoded constant instead.
|
|
37
43
|
*/
|
|
38
|
-
export declare function createProviderRegistry(config: ProviderRegistryConfig): {
|
|
44
|
+
export declare function createProviderRegistry(config: ProviderRegistryConfig, defaults: ProviderTuningDefaults): {
|
|
39
45
|
readonly get: (name: string) => ProviderClient;
|
|
40
46
|
readonly has: (name: string) => boolean;
|
|
41
47
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,2IAA2I;IAC3I,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,kDAAkD;IAClD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CACxC;AAED,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAA;AAkElF;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,sBAAsB,EAC9B,QAAQ,EAAE,sBAAsB,GAC/B;IACD,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,CAAA;IAC9C,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CACxC,CAoBA"}
|
|
@@ -10,7 +10,7 @@ import { createOpenAiClient } from './openai.js';
|
|
|
10
10
|
* endpoint" means structurally, not a separate `custom: true` flag to keep
|
|
11
11
|
* in sync with this lookup.
|
|
12
12
|
*/
|
|
13
|
-
function buildClient(name, entry) {
|
|
13
|
+
function buildClient(name, entry, defaults) {
|
|
14
14
|
const catalogEntry = findProviderCatalogEntry(name);
|
|
15
15
|
const tuning = {
|
|
16
16
|
...(entry.maxOutputTokens === undefined ? {} : { maxOutputTokens: entry.maxOutputTokens }),
|
|
@@ -25,6 +25,7 @@ function buildClient(name, entry) {
|
|
|
25
25
|
model: entry.model,
|
|
26
26
|
...(entry.baseUrl === undefined ? {} : { baseUrl: entry.baseUrl }),
|
|
27
27
|
...tuning,
|
|
28
|
+
defaults,
|
|
28
29
|
});
|
|
29
30
|
}
|
|
30
31
|
if (catalogEntry?.wireFormat === 'google') {
|
|
@@ -33,6 +34,7 @@ function buildClient(name, entry) {
|
|
|
33
34
|
model: entry.model,
|
|
34
35
|
...(entry.baseUrl === undefined ? {} : { baseUrl: entry.baseUrl }),
|
|
35
36
|
...tuning,
|
|
37
|
+
defaults,
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
// `wireFormat: 'openai-compatible'` (OpenAI itself, OpenRouter, DeepSeek,
|
|
@@ -46,18 +48,33 @@ function buildClient(name, entry) {
|
|
|
46
48
|
hint: 'Set a baseUrl for a custom OpenAI-compatible endpoint, or use a catalog provider id.',
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
|
-
return createOpenAiClient({
|
|
51
|
+
return createOpenAiClient({
|
|
52
|
+
apiKey: entry.apiKey,
|
|
53
|
+
model: entry.model,
|
|
54
|
+
baseUrl,
|
|
55
|
+
name,
|
|
56
|
+
...(catalogEntry?.usesMaxCompletionTokens === undefined
|
|
57
|
+
? {}
|
|
58
|
+
: { usesMaxCompletionTokens: catalogEntry.usesMaxCompletionTokens }),
|
|
59
|
+
...tuning,
|
|
60
|
+
defaults,
|
|
61
|
+
});
|
|
50
62
|
}
|
|
51
63
|
/**
|
|
52
64
|
* One client per configured vendor — a site with no LLM provider configured
|
|
53
65
|
* simply has an empty registry, which is exactly what rule R2 requires ("le
|
|
54
66
|
* CMS fonctionne sans IA"): nothing here fails to construct, `get()` is what
|
|
55
67
|
* refuses, and only once an agent actually tries to run.
|
|
68
|
+
*
|
|
69
|
+
* `defaults` is the site-wide tuning floor (`resolveProviderTuningDefaults`,
|
|
70
|
+
* `assistant.*` site settings) every entry's own per-provider override falls
|
|
71
|
+
* back to — required, so no adapter this registry builds can ever fall back
|
|
72
|
+
* to a hardcoded constant instead.
|
|
56
73
|
*/
|
|
57
|
-
export function createProviderRegistry(config) {
|
|
74
|
+
export function createProviderRegistry(config, defaults) {
|
|
58
75
|
const clients = new Map();
|
|
59
76
|
for (const [name, entry] of Object.entries(config)) {
|
|
60
|
-
clients.set(name, buildClient(name, entry));
|
|
77
|
+
clients.set(name, buildClient(name, entry, defaults));
|
|
61
78
|
}
|
|
62
79
|
return {
|
|
63
80
|
has: (name) => clients.has(name),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Every default-`false` timeout: none of the three adapters ever bounded a
|
|
3
|
-
* model call on their own — `ChatOptions.signal` only cancels when a caller
|
|
4
|
-
* (the run loop's own cancellation, task 2) supplies one, and the run loop
|
|
5
|
-
* never does for a single chat turn triggered by `POST
|
|
6
|
-
* .../conversation/messages`. Reproduced live: a stalled DeepSeek response
|
|
7
|
-
* left that request (and the browser tab awaiting it) hung for minutes with
|
|
8
|
-
* no error, nothing in the server log, and no way to recover short of
|
|
9
|
-
* killing the process. This is the floor every adapter now falls back to
|
|
10
|
-
* when the caller supplies no signal of its own — a stalled vendor fails
|
|
11
|
-
* with a named error instead of hanging the caller forever.
|
|
12
|
-
*/
|
|
13
|
-
export declare const DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS = 180000;
|
|
14
1
|
/**
|
|
15
2
|
* The caller's own signal (if any) combined with a timeout floor, so a
|
|
16
3
|
* cancellation the run loop already wants (budget exceeded, kill switch)
|
|
17
4
|
* still works exactly as before, and an otherwise-uncancelled call still
|
|
18
|
-
* gives up eventually.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
5
|
+
* gives up eventually.
|
|
6
|
+
*
|
|
7
|
+
* `timeoutMs` is required — every real caller (the three provider adapters)
|
|
8
|
+
* always resolves a concrete `requestTimeoutMs` before calling this
|
|
9
|
+
* (`ProviderClient.requestTimeoutMs`, itself always a number: the admin's
|
|
10
|
+
* per-provider override or the site-wide `assistant.defaultRequestTimeoutSeconds`
|
|
11
|
+
* floor, `SITE_SETTINGS_REGISTRY` in `@cogenta/schema`). This function used
|
|
12
|
+
* to default it to a `DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS` constant — fiche
|
|
13
|
+
* feedback: that hid a real site behaviour (what happens when a call to a
|
|
14
|
+
* stalled vendor never returns — reproduced live once, see the changeset
|
|
15
|
+
* history) behind a number nothing but this file's own comment ever named.
|
|
21
16
|
*/
|
|
22
|
-
export declare function requestSignalWithTimeout(callerSignal: AbortSignal | undefined, timeoutMs
|
|
17
|
+
export declare function requestSignalWithTimeout(callerSignal: AbortSignal | undefined, timeoutMs: number): AbortSignal;
|
|
23
18
|
//# sourceMappingURL=request-signal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-signal.d.ts","sourceRoot":"","sources":["../../src/providers/request-signal.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"request-signal.d.ts","sourceRoot":"","sources":["../../src/providers/request-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,WAAW,GAAG,SAAS,EACrC,SAAS,EAAE,MAAM,GAChB,WAAW,CAGb"}
|
|
@@ -1,25 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Every default-`false` timeout: none of the three adapters ever bounded a
|
|
3
|
-
* model call on their own — `ChatOptions.signal` only cancels when a caller
|
|
4
|
-
* (the run loop's own cancellation, task 2) supplies one, and the run loop
|
|
5
|
-
* never does for a single chat turn triggered by `POST
|
|
6
|
-
* .../conversation/messages`. Reproduced live: a stalled DeepSeek response
|
|
7
|
-
* left that request (and the browser tab awaiting it) hung for minutes with
|
|
8
|
-
* no error, nothing in the server log, and no way to recover short of
|
|
9
|
-
* killing the process. This is the floor every adapter now falls back to
|
|
10
|
-
* when the caller supplies no signal of its own — a stalled vendor fails
|
|
11
|
-
* with a named error instead of hanging the caller forever.
|
|
12
|
-
*/
|
|
13
|
-
export const DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS = 180_000;
|
|
14
1
|
/**
|
|
15
2
|
* The caller's own signal (if any) combined with a timeout floor, so a
|
|
16
3
|
* cancellation the run loop already wants (budget exceeded, kill switch)
|
|
17
4
|
* still works exactly as before, and an otherwise-uncancelled call still
|
|
18
|
-
* gives up eventually.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
5
|
+
* gives up eventually.
|
|
6
|
+
*
|
|
7
|
+
* `timeoutMs` is required — every real caller (the three provider adapters)
|
|
8
|
+
* always resolves a concrete `requestTimeoutMs` before calling this
|
|
9
|
+
* (`ProviderClient.requestTimeoutMs`, itself always a number: the admin's
|
|
10
|
+
* per-provider override or the site-wide `assistant.defaultRequestTimeoutSeconds`
|
|
11
|
+
* floor, `SITE_SETTINGS_REGISTRY` in `@cogenta/schema`). This function used
|
|
12
|
+
* to default it to a `DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS` constant — fiche
|
|
13
|
+
* feedback: that hid a real site behaviour (what happens when a call to a
|
|
14
|
+
* stalled vendor never returns — reproduced live once, see the changeset
|
|
15
|
+
* history) behind a number nothing but this file's own comment ever named.
|
|
21
16
|
*/
|
|
22
|
-
export function requestSignalWithTimeout(callerSignal, timeoutMs
|
|
17
|
+
export function requestSignalWithTimeout(callerSignal, timeoutMs) {
|
|
23
18
|
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
24
19
|
return callerSignal === undefined ? timeoutSignal : AbortSignal.any([callerSignal, timeoutSignal]);
|
|
25
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-signal.js","sourceRoot":"","sources":["../../src/providers/request-signal.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"request-signal.js","sourceRoot":"","sources":["../../src/providers/request-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,wBAAwB,CACtC,YAAqC,EACrC,SAAiB;IAEjB,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACpD,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAA;AACpG,CAAC"}
|