@framers/agentos 0.11.1 → 0.11.4
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/core/llm/providers/model-strict-tool-use.d.ts +20 -1
- package/dist/core/llm/providers/model-strict-tool-use.d.ts.map +1 -1
- package/dist/core/llm/providers/model-strict-tool-use.js +73 -2
- package/dist/core/llm/providers/model-strict-tool-use.js.map +1 -1
- package/dist/core/llm/providers/structuredOutputFormat.d.ts +28 -0
- package/dist/core/llm/providers/structuredOutputFormat.d.ts.map +1 -1
- package/dist/core/llm/providers/structuredOutputFormat.js +70 -18
- package/dist/core/llm/providers/structuredOutputFormat.js.map +1 -1
- package/dist/io/media/images/imageToBuffer.d.ts +4 -2
- package/dist/io/media/images/imageToBuffer.d.ts.map +1 -1
- package/dist/io/media/images/imageToBuffer.js +39 -23
- package/dist/io/media/images/imageToBuffer.js.map +1 -1
- package/dist/io/speech/SpeechProviderResolver.d.ts +55 -19
- package/dist/io/speech/SpeechProviderResolver.d.ts.map +1 -1
- package/dist/io/speech/SpeechProviderResolver.js +112 -42
- package/dist/io/speech/SpeechProviderResolver.js.map +1 -1
- package/package.json +1 -1
|
@@ -75,11 +75,30 @@ export declare function modelSupportsStrictToolUse(modelId: string): boolean;
|
|
|
75
75
|
* `not` / `contains` / `unevaluatedProperties`) — a FIELD literally named
|
|
76
76
|
* `additionalProperties` inside `properties` must not trip the check.
|
|
77
77
|
*
|
|
78
|
+
* The check also applies Anthropic's explicit complexity limits (see
|
|
79
|
+
* {@link STRICT_MAX_UNION_TYPED_PARAMETERS}): a schema over them 400s on every
|
|
80
|
+
* attempt, so it degrades to the non-strict forced tool too.
|
|
81
|
+
*
|
|
78
82
|
* @param inputSchema Lowered JSON Schema destined for `tool.input_schema`.
|
|
79
83
|
* @returns `true` when no reachable node carries a non-`false`
|
|
80
|
-
* `additionalProperties
|
|
84
|
+
* `additionalProperties` and the schema is within the complexity limits;
|
|
85
|
+
* `false` otherwise (caller must omit `strict`).
|
|
81
86
|
*/
|
|
82
87
|
export declare function toolInputSchemaSupportsStrict(inputSchema: unknown): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Anthropic's explicit limit on parameters that use `anyOf` or a type array
|
|
90
|
+
* (`"type": ["string", "null"]`), summed over every strict schema in a request:
|
|
91
|
+
* https://platform.claude.com/docs/en/build-with-claude/structured-outputs
|
|
92
|
+
* ("Schema complexity limits"). The forced structured-output tool is the only
|
|
93
|
+
* strict schema in its request, so its own count is the request's total.
|
|
94
|
+
*/
|
|
95
|
+
export declare const STRICT_MAX_UNION_TYPED_PARAMETERS = 16;
|
|
96
|
+
/**
|
|
97
|
+
* Anthropic's explicit limit on parameters left out of `required`, summed over
|
|
98
|
+
* every strict schema in a request (same page as
|
|
99
|
+
* {@link STRICT_MAX_UNION_TYPED_PARAMETERS}).
|
|
100
|
+
*/
|
|
101
|
+
export declare const STRICT_MAX_OPTIONAL_PARAMETERS = 24;
|
|
83
102
|
/**
|
|
84
103
|
* Rewrite a strict-compatible `input_schema` so every reachable object node
|
|
85
104
|
* carries `additionalProperties: false` EXPLICITLY.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-strict-tool-use.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/model-strict-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAInE;AAED
|
|
1
|
+
{"version":3,"file":"model-strict-tool-use.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/model-strict-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAInE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAQ3E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAsIjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,uCAAuC,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAErF"}
|
|
@@ -77,12 +77,83 @@ export function modelSupportsStrictToolUse(modelId) {
|
|
|
77
77
|
* `not` / `contains` / `unevaluatedProperties`) — a FIELD literally named
|
|
78
78
|
* `additionalProperties` inside `properties` must not trip the check.
|
|
79
79
|
*
|
|
80
|
+
* The check also applies Anthropic's explicit complexity limits (see
|
|
81
|
+
* {@link STRICT_MAX_UNION_TYPED_PARAMETERS}): a schema over them 400s on every
|
|
82
|
+
* attempt, so it degrades to the non-strict forced tool too.
|
|
83
|
+
*
|
|
80
84
|
* @param inputSchema Lowered JSON Schema destined for `tool.input_schema`.
|
|
81
85
|
* @returns `true` when no reachable node carries a non-`false`
|
|
82
|
-
* `additionalProperties
|
|
86
|
+
* `additionalProperties` and the schema is within the complexity limits;
|
|
87
|
+
* `false` otherwise (caller must omit `strict`).
|
|
83
88
|
*/
|
|
84
89
|
export function toolInputSchemaSupportsStrict(inputSchema) {
|
|
85
|
-
|
|
90
|
+
if (!nodeSupportsStrict(inputSchema, 0))
|
|
91
|
+
return false;
|
|
92
|
+
const counts = { unionTyped: 0, optional: 0 };
|
|
93
|
+
countStrictParameters(inputSchema, 0, counts);
|
|
94
|
+
return (counts.unionTyped <= STRICT_MAX_UNION_TYPED_PARAMETERS &&
|
|
95
|
+
counts.optional <= STRICT_MAX_OPTIONAL_PARAMETERS);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Anthropic's explicit limit on parameters that use `anyOf` or a type array
|
|
99
|
+
* (`"type": ["string", "null"]`), summed over every strict schema in a request:
|
|
100
|
+
* https://platform.claude.com/docs/en/build-with-claude/structured-outputs
|
|
101
|
+
* ("Schema complexity limits"). The forced structured-output tool is the only
|
|
102
|
+
* strict schema in its request, so its own count is the request's total.
|
|
103
|
+
*/
|
|
104
|
+
export const STRICT_MAX_UNION_TYPED_PARAMETERS = 16;
|
|
105
|
+
/**
|
|
106
|
+
* Anthropic's explicit limit on parameters left out of `required`, summed over
|
|
107
|
+
* every strict schema in a request (same page as
|
|
108
|
+
* {@link STRICT_MAX_UNION_TYPED_PARAMETERS}).
|
|
109
|
+
*/
|
|
110
|
+
export const STRICT_MAX_OPTIONAL_PARAMETERS = 24;
|
|
111
|
+
/**
|
|
112
|
+
* Count, below the root, the nodes that use `anyOf` / `oneOf` or a type array,
|
|
113
|
+
* and the object properties left out of `required`. It walks the positions
|
|
114
|
+
* {@link nodeSupportsStrict} walks. A node reached twice (a shared `$defs`
|
|
115
|
+
* entry) counts once per position, which can only over-count, and an
|
|
116
|
+
* over-count only costs strict mode, never the request.
|
|
117
|
+
*/
|
|
118
|
+
function countStrictParameters(node, depth, counts) {
|
|
119
|
+
if (depth > MAX_STRICT_SCAN_DEPTH)
|
|
120
|
+
return;
|
|
121
|
+
if (!node || typeof node !== 'object' || Array.isArray(node))
|
|
122
|
+
return;
|
|
123
|
+
const schema = node;
|
|
124
|
+
if (depth > 0 &&
|
|
125
|
+
(Array.isArray(schema.type) || Array.isArray(schema.anyOf) || Array.isArray(schema.oneOf))) {
|
|
126
|
+
counts.unionTyped += 1;
|
|
127
|
+
}
|
|
128
|
+
const properties = schema.properties;
|
|
129
|
+
if (properties && typeof properties === 'object' && !Array.isArray(properties)) {
|
|
130
|
+
const required = new Set(Array.isArray(schema.required) ? schema.required : []);
|
|
131
|
+
for (const name of Object.keys(properties)) {
|
|
132
|
+
if (!required.has(name))
|
|
133
|
+
counts.optional += 1;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const subschemas = [];
|
|
137
|
+
for (const key of ['properties', 'patternProperties', '$defs', 'definitions', 'dependentSchemas']) {
|
|
138
|
+
const map = schema[key];
|
|
139
|
+
if (map && typeof map === 'object' && !Array.isArray(map)) {
|
|
140
|
+
subschemas.push(...Object.values(map));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
for (const key of ['items', 'prefixItems', 'anyOf', 'oneOf', 'allOf']) {
|
|
144
|
+
const value = schema[key];
|
|
145
|
+
if (Array.isArray(value))
|
|
146
|
+
subschemas.push(...value);
|
|
147
|
+
else if (value && typeof value === 'object')
|
|
148
|
+
subschemas.push(value);
|
|
149
|
+
}
|
|
150
|
+
for (const key of ['if', 'then', 'else', 'not', 'contains', 'unevaluatedProperties']) {
|
|
151
|
+
const value = schema[key];
|
|
152
|
+
if (value && typeof value === 'object' && !Array.isArray(value))
|
|
153
|
+
subschemas.push(value);
|
|
154
|
+
}
|
|
155
|
+
for (const sub of subschemas)
|
|
156
|
+
countStrictParameters(sub, depth + 1, counts);
|
|
86
157
|
}
|
|
87
158
|
/** Defensive recursion bound — lowered schemas are shallow trees; anything
|
|
88
159
|
* deeper is malformed and must not stack-overflow the request path. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-strict-tool-use.js","sourceRoot":"","sources":["../../../../src/core/llm/providers/model-strict-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,oEAAoE,CAAC,IAAI,CAC9E,OAAO,CACR,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"model-strict-tool-use.js","sourceRoot":"","sources":["../../../../src/core/llm/providers/model-strict-tool-use.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,34 @@ export interface BuildResponseFormatInput {
|
|
|
31
31
|
*/
|
|
32
32
|
schemaName: string;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Adapt a lowered JSON Schema into a shape Anthropic's tool `input_schema`
|
|
36
|
+
* accepts. The Anthropic Messages API requires the tool input_schema to be a
|
|
37
|
+
* JSON Schema **object** with a top-level `type`, and REJECTS a top-level
|
|
38
|
+
* `oneOf` / `allOf` / `anyOf` (`input_schema does not support … at the top
|
|
39
|
+
* level`). {@link lowerZodToJsonSchema} emits `{ anyOf: [...] }` for a top-level
|
|
40
|
+
* `z.union` / `z.discriminatedUnion` and `{}` for shapes it does not model.
|
|
41
|
+
* Two adaptations:
|
|
42
|
+
*
|
|
43
|
+
* 1. **Union of objects → one merged object.** Union the members' `properties`
|
|
44
|
+
* (merging same-named `enum` members so a discriminant like `kind` becomes
|
|
45
|
+
* the full set of variant values, and keeping a shared property's differing
|
|
46
|
+
* schemas under a nested `anyOf`), and keep in `required` only the fields
|
|
47
|
+
* required by EVERY member, so variant-specific fields stay optional. The
|
|
48
|
+
* model returns one flat object; the caller's Zod schema re-validates the
|
|
49
|
+
* exact variant, so strictness is preserved. Nested `anyOf` (inside a
|
|
50
|
+
* property / `additionalProperties`) is left intact — Anthropic only forbids
|
|
51
|
+
* it at the TOP level.
|
|
52
|
+
* 2. **No top-level `type` (e.g. `{}` or a non-object union) → `{ type: 'object' }`**
|
|
53
|
+
* (mirrors the `?? { type: 'object' }` fallback AnthropicProvider's regular
|
|
54
|
+
* tool-conversion path applies). An object schema already carrying a `type`
|
|
55
|
+
* passes through unchanged.
|
|
56
|
+
*
|
|
57
|
+
* @internal Exported for tests: {@link lowerZodToJsonSchema} gives an enum no
|
|
58
|
+
* other fields, so some merge rules can only be reached with a hand-written
|
|
59
|
+
* schema. Callers use {@link buildResponseFormat}.
|
|
60
|
+
*/
|
|
61
|
+
export declare function ensureAnthropicObjectSchema(jsonSchema: unknown): Record<string, unknown>;
|
|
34
62
|
/**
|
|
35
63
|
* Build a provider-specific structured-output payload from a Zod schema.
|
|
36
64
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structuredOutputFormat.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGnC;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"structuredOutputFormat.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGnC;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AA2ED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2DxF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoCzB"}
|
|
@@ -12,6 +12,60 @@ function sanitizeName(name) {
|
|
|
12
12
|
return 'response';
|
|
13
13
|
return name.replace(SCHEMA_NAME_INVALID_CHARS, '_').slice(0, SCHEMA_NAME_MAX_LEN);
|
|
14
14
|
}
|
|
15
|
+
/** JSON with object keys sorted, so two schemas that differ only in key order compare equal. */
|
|
16
|
+
function stableStringify(value) {
|
|
17
|
+
if (Array.isArray(value)) {
|
|
18
|
+
return `[${value.map(stableStringify).join(',')}]`;
|
|
19
|
+
}
|
|
20
|
+
if (value && typeof value === 'object') {
|
|
21
|
+
const entries = Object.keys(value)
|
|
22
|
+
.sort()
|
|
23
|
+
.map((k) => `${JSON.stringify(k)}:${stableStringify(value[k])}`);
|
|
24
|
+
return `{${entries.join(',')}}`;
|
|
25
|
+
}
|
|
26
|
+
return JSON.stringify(value) ?? 'undefined';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Merges the schemas that the variants of a top-level union give one property.
|
|
30
|
+
* Enum schemas (a discriminant such as `kind`) become one enum of every value,
|
|
31
|
+
* keeping the fields they all share;
|
|
32
|
+
* otherwise identical schemas collapse to one, and different ones are kept side
|
|
33
|
+
* by side under a nested `anyOf`, which Anthropic accepts below the top level.
|
|
34
|
+
* Keeping only the first variant's schema would tell the model a later
|
|
35
|
+
* variant's value has the first variant's type, and the reply would then fail
|
|
36
|
+
* the caller's Zod schema.
|
|
37
|
+
*/
|
|
38
|
+
function mergePropertySchemas(schemas) {
|
|
39
|
+
if (schemas.length === 1) {
|
|
40
|
+
return schemas[0];
|
|
41
|
+
}
|
|
42
|
+
if (schemas.every((s) => s && typeof s === 'object' && Array.isArray(s.enum))) {
|
|
43
|
+
const records = schemas;
|
|
44
|
+
// Fields every variant gives the same value (`type`, a shared `description`) stay.
|
|
45
|
+
const shared = {};
|
|
46
|
+
for (const [field, value] of Object.entries(records[0])) {
|
|
47
|
+
if (field === 'enum')
|
|
48
|
+
continue;
|
|
49
|
+
if (records.every((r) => field in r && stableStringify(r[field]) === stableStringify(value))) {
|
|
50
|
+
shared[field] = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
...shared,
|
|
55
|
+
enum: Array.from(new Set(records.flatMap((r) => r.enum))),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const distinct = [];
|
|
59
|
+
const seen = new Set();
|
|
60
|
+
for (const schema of schemas) {
|
|
61
|
+
const key = stableStringify(schema);
|
|
62
|
+
if (!seen.has(key)) {
|
|
63
|
+
seen.add(key);
|
|
64
|
+
distinct.push(schema);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return distinct.length === 1 ? distinct[0] : { anyOf: distinct };
|
|
68
|
+
}
|
|
15
69
|
/**
|
|
16
70
|
* Adapt a lowered JSON Schema into a shape Anthropic's tool `input_schema`
|
|
17
71
|
* accepts. The Anthropic Messages API requires the tool input_schema to be a
|
|
@@ -23,7 +77,8 @@ function sanitizeName(name) {
|
|
|
23
77
|
*
|
|
24
78
|
* 1. **Union of objects → one merged object.** Union the members' `properties`
|
|
25
79
|
* (merging same-named `enum` members so a discriminant like `kind` becomes
|
|
26
|
-
* the full set of variant values
|
|
80
|
+
* the full set of variant values, and keeping a shared property's differing
|
|
81
|
+
* schemas under a nested `anyOf`), and keep in `required` only the fields
|
|
27
82
|
* required by EVERY member, so variant-specific fields stay optional. The
|
|
28
83
|
* model returns one flat object; the caller's Zod schema re-validates the
|
|
29
84
|
* exact variant, so strictness is preserved. Nested `anyOf` (inside a
|
|
@@ -33,8 +88,12 @@ function sanitizeName(name) {
|
|
|
33
88
|
* (mirrors the `?? { type: 'object' }` fallback AnthropicProvider's regular
|
|
34
89
|
* tool-conversion path applies). An object schema already carrying a `type`
|
|
35
90
|
* passes through unchanged.
|
|
91
|
+
*
|
|
92
|
+
* @internal Exported for tests: {@link lowerZodToJsonSchema} gives an enum no
|
|
93
|
+
* other fields, so some merge rules can only be reached with a hand-written
|
|
94
|
+
* schema. Callers use {@link buildResponseFormat}.
|
|
36
95
|
*/
|
|
37
|
-
function ensureAnthropicObjectSchema(jsonSchema) {
|
|
96
|
+
export function ensureAnthropicObjectSchema(jsonSchema) {
|
|
38
97
|
if (!jsonSchema || typeof jsonSchema !== 'object') {
|
|
39
98
|
return { type: 'object' };
|
|
40
99
|
}
|
|
@@ -47,28 +106,17 @@ function ensureAnthropicObjectSchema(jsonSchema) {
|
|
|
47
106
|
if (variants &&
|
|
48
107
|
variants.length > 0 &&
|
|
49
108
|
variants.every((v) => v && typeof v === 'object' && v.type === 'object')) {
|
|
50
|
-
|
|
109
|
+
// Every variant's schema for each property, in the order properties first appear.
|
|
110
|
+
const propertySchemas = new Map();
|
|
51
111
|
const requiredCounts = {};
|
|
52
112
|
for (const variant of variants) {
|
|
53
113
|
const props = variant.properties && typeof variant.properties === 'object'
|
|
54
114
|
? variant.properties
|
|
55
115
|
: {};
|
|
56
116
|
for (const [key, propSchema] of Object.entries(props)) {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
Array.isArray(existing.enum) &&
|
|
61
|
-
incoming &&
|
|
62
|
-
Array.isArray(incoming.enum)) {
|
|
63
|
-
// Same field is an enum across variants (e.g. the discriminant) —
|
|
64
|
-
// union the allowed values so the model can satisfy any variant.
|
|
65
|
-
mergedProperties[key] = {
|
|
66
|
-
enum: Array.from(new Set([...existing.enum, ...incoming.enum])),
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
else if (!(key in mergedProperties)) {
|
|
70
|
-
mergedProperties[key] = propSchema;
|
|
71
|
-
}
|
|
117
|
+
const schemas = propertySchemas.get(key) ?? [];
|
|
118
|
+
schemas.push(propSchema);
|
|
119
|
+
propertySchemas.set(key, schemas);
|
|
72
120
|
}
|
|
73
121
|
const variantRequired = Array.isArray(variant.required)
|
|
74
122
|
? variant.required
|
|
@@ -80,6 +128,10 @@ function ensureAnthropicObjectSchema(jsonSchema) {
|
|
|
80
128
|
// A field is required in the merged object only when EVERY variant requires
|
|
81
129
|
// it; variant-specific fields must stay optional.
|
|
82
130
|
const required = Object.keys(requiredCounts).filter((field) => requiredCounts[field] === variants.length);
|
|
131
|
+
const mergedProperties = {};
|
|
132
|
+
for (const [key, schemas] of propertySchemas) {
|
|
133
|
+
mergedProperties[key] = mergePropertySchemas(schemas);
|
|
134
|
+
}
|
|
83
135
|
return {
|
|
84
136
|
type: 'object',
|
|
85
137
|
properties: mergedProperties,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structuredOutputFormat.js","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AAmBzF,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AACnD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,SAAS,YAAY,CAAC,IAAY;IAChC,wEAAwE;IACxE,wEAAwE;IACxE,qEAAqE;IACrE,sEAAsE;IACtE,mBAAmB;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;AACpF,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"structuredOutputFormat.js","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,10 @@
|
|
|
9
9
|
* or a file path is decoded directly. One that looks like a path is read as
|
|
10
10
|
* a file first, and decoded when no file exists there and it is base64
|
|
11
11
|
* (standard or URL-safe) whose bytes start with a PNG, JPEG, GIF, WebP, TIFF,
|
|
12
|
-
* AVIF
|
|
13
|
-
* JPEG's base64 begins with `/9j/`. A
|
|
12
|
+
* AVIF, HEIC, BMP, ICO, JPEG 2000, JPEG XL or SVG signature: standard base64
|
|
13
|
+
* uses `/` (RFC 4648, Table 1), so a JPEG's base64 begins with `/9j/`. A
|
|
14
|
+
* missing path is still an error; when the string is base64 of another
|
|
15
|
+
* format, the error says so without repeating the string.
|
|
14
16
|
* - **`file://` URL** — resolved to a local filesystem path and read.
|
|
15
17
|
* - **HTTP/HTTPS URL** — fetched via `globalThis.fetch` and buffered.
|
|
16
18
|
* - **Local file path** — a string that contains `/` or `\`, or ends in a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageToBuffer.d.ts","sourceRoot":"","sources":["../../../../src/io/media/images/imageToBuffer.ts"],"names":[],"mappings":"AAYA
|
|
1
|
+
{"version":3,"file":"imageToBuffer.d.ts","sourceRoot":"","sources":["../../../../src/io/media/images/imageToBuffer.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyE3E;AAsDD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAI3D"}
|
|
@@ -20,8 +20,10 @@ import * as fs from 'node:fs/promises';
|
|
|
20
20
|
* or a file path is decoded directly. One that looks like a path is read as
|
|
21
21
|
* a file first, and decoded when no file exists there and it is base64
|
|
22
22
|
* (standard or URL-safe) whose bytes start with a PNG, JPEG, GIF, WebP, TIFF,
|
|
23
|
-
* AVIF
|
|
24
|
-
* JPEG's base64 begins with `/9j/`. A
|
|
23
|
+
* AVIF, HEIC, BMP, ICO, JPEG 2000, JPEG XL or SVG signature: standard base64
|
|
24
|
+
* uses `/` (RFC 4648, Table 1), so a JPEG's base64 begins with `/9j/`. A
|
|
25
|
+
* missing path is still an error; when the string is base64 of another
|
|
26
|
+
* format, the error says so without repeating the string.
|
|
25
27
|
* - **`file://` URL** — resolved to a local filesystem path and read.
|
|
26
28
|
* - **HTTP/HTTPS URL** — fetched via `globalThis.fetch` and buffered.
|
|
27
29
|
* - **Local file path** — a string that contains `/` or `\`, or ends in a
|
|
@@ -85,11 +87,19 @@ export async function imageToBuffer(input) {
|
|
|
85
87
|
// Standard base64 uses `/` (RFC 4648, Table 1), so raw base64 looks like a
|
|
86
88
|
// path. When no file exists there and the string decodes to image bytes,
|
|
87
89
|
// it is the image; a missing path that does not stays an error.
|
|
88
|
-
const
|
|
89
|
-
if (
|
|
90
|
-
|
|
90
|
+
const compact = trimmed.replace(/\s+/g, '');
|
|
91
|
+
if (!isMissingFileError(error) || !BASE64_PATTERN.test(compact)) {
|
|
92
|
+
throw error;
|
|
91
93
|
}
|
|
92
|
-
|
|
94
|
+
const bytes = Buffer.from(compact, 'base64');
|
|
95
|
+
if (hasImageSignature(bytes)) {
|
|
96
|
+
return bytes;
|
|
97
|
+
}
|
|
98
|
+
// Node's error names the whole string as the path, which for a base64
|
|
99
|
+
// payload can run to megabytes in a message or a log line.
|
|
100
|
+
throw Object.assign(new Error(`imageToBuffer: no file exists at ${preview(trimmed)}, and it is not base64 of a ` +
|
|
101
|
+
'recognised image format (PNG, JPEG, GIF, WebP, TIFF, AVIF, HEIC, BMP, ICO, ' +
|
|
102
|
+
'JPEG 2000, JPEG XL or SVG). Pass the image as a data URL or a Buffer.'), { code: error.code, cause: error });
|
|
93
103
|
}
|
|
94
104
|
}
|
|
95
105
|
// Fallback: raw base64 string (no data URL prefix).
|
|
@@ -97,24 +107,18 @@ export async function imageToBuffer(input) {
|
|
|
97
107
|
}
|
|
98
108
|
/** The standard and URL-safe base64 alphabets of RFC 4648, with optional padding. */
|
|
99
109
|
const BASE64_PATTERN = /^[A-Za-z0-9+/_-]+={0,2}$/;
|
|
100
|
-
/**
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
* do not start with a PNG, JPEG, GIF, WebP, TIFF, AVIF or HEIC signature.
|
|
106
|
-
*/
|
|
107
|
-
function decodeBase64Image(value) {
|
|
108
|
-
const compact = value.replace(/\s+/g, '');
|
|
109
|
-
if (!BASE64_PATTERN.test(compact)) {
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
const bytes = Buffer.from(compact, 'base64');
|
|
113
|
-
return hasImageSignature(bytes) ? bytes : null;
|
|
110
|
+
/** A short, quoted form of `value` for an error message. */
|
|
111
|
+
function preview(value) {
|
|
112
|
+
return value.length <= 80
|
|
113
|
+
? JSON.stringify(value)
|
|
114
|
+
: `${JSON.stringify(value.slice(0, 40))}... (${value.length} characters)`;
|
|
114
115
|
}
|
|
115
116
|
/**
|
|
116
|
-
* True when `bytes` start with the signature of PNG, JPEG, GIF, WebP, TIFF,
|
|
117
|
-
*
|
|
117
|
+
* True when `bytes` start with the signature of PNG, JPEG, GIF, WebP, TIFF, an
|
|
118
|
+
* ISO media file such as AVIF or HEIC (`ftyp` at offset 4), BMP, ICO, JPEG 2000,
|
|
119
|
+
* the JPEG XL container, or SVG text. JPEG XL's bare codestream marker (FF 0A)
|
|
120
|
+
* is left out: two bytes are too few, and a path such as `/work...` decodes to
|
|
121
|
+
* them.
|
|
118
122
|
*/
|
|
119
123
|
function hasImageSignature(bytes) {
|
|
120
124
|
const startsWith = (...signature) => signature.every((byte, i) => bytes[i] === byte);
|
|
@@ -124,7 +128,19 @@ function hasImageSignature(bytes) {
|
|
|
124
128
|
(startsWith(0x52, 0x49, 0x46, 0x46) && bytes.subarray(8, 12).toString('latin1') === 'WEBP') ||
|
|
125
129
|
startsWith(0x49, 0x49, 0x2a, 0x00) || // TIFF, little-endian
|
|
126
130
|
startsWith(0x4d, 0x4d, 0x00, 0x2a) || // TIFF, big-endian
|
|
127
|
-
bytes.subarray(4, 8).toString('latin1') === 'ftyp'
|
|
131
|
+
bytes.subarray(4, 8).toString('latin1') === 'ftyp' ||
|
|
132
|
+
// BMP: "BM", then the file size, which a whole file's bytes match.
|
|
133
|
+
(startsWith(0x42, 0x4d) && bytes.length >= 6 && bytes.readUInt32LE(2) === bytes.length) ||
|
|
134
|
+
startsWith(0x00, 0x00, 0x01, 0x00) || // ICO
|
|
135
|
+
startsWith(0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20, 0x0d, 0x0a, 0x87, 0x0a) || // JPEG 2000 (JP2)
|
|
136
|
+
startsWith(0xff, 0x4f, 0xff, 0x51) || // JPEG 2000 codestream
|
|
137
|
+
startsWith(0x00, 0x00, 0x00, 0x0c, 0x4a, 0x58, 0x4c, 0x20, 0x0d, 0x0a, 0x87, 0x0a) || // JPEG XL container
|
|
138
|
+
isSvgText(bytes));
|
|
139
|
+
}
|
|
140
|
+
/** True when `bytes` are SVG markup: `<svg`, or an XML declaration followed by `<svg`. */
|
|
141
|
+
function isSvgText(bytes) {
|
|
142
|
+
const head = bytes.subarray(0, 1024).toString('utf8').replace(/^\uFEFF/, '').trimStart();
|
|
143
|
+
return head.startsWith('<svg') || (head.startsWith('<?xml') && head.includes('<svg'));
|
|
128
144
|
}
|
|
129
145
|
/**
|
|
130
146
|
* True for the errors `fs.readFile` gives when nothing exists at the path,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageToBuffer.js","sourceRoot":"","sources":["../../../../src/io/media/images/imageToBuffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC
|
|
1
|
+
{"version":3,"file":"imageToBuffer.js","sourceRoot":"","sources":["../../../../src/io/media/images/imageToBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,11 +58,25 @@ export declare class SpeechProviderResolver extends EventEmitter {
|
|
|
58
58
|
private readonly config?;
|
|
59
59
|
private readonly env;
|
|
60
60
|
/**
|
|
61
|
-
* Internal registry of all providers keyed by
|
|
62
|
-
*
|
|
63
|
-
*
|
|
61
|
+
* Internal registry of all providers, keyed by kind and id (`keyOf()`), so a
|
|
62
|
+
* speech-to-text and a text-to-speech provider can share an id. Overwrites
|
|
63
|
+
* are allowed — re-registering the same kind and id replaces the previous
|
|
64
|
+
* entry, which lets hot-reload and extension refresh work seamlessly.
|
|
64
65
|
*/
|
|
65
66
|
private registrations;
|
|
67
|
+
/**
|
|
68
|
+
* The priority each provider was registered with. `refresh()` restores it
|
|
69
|
+
* before applying the preferred lists, so a provider that is no longer
|
|
70
|
+
* preferred loses its boost.
|
|
71
|
+
*/
|
|
72
|
+
private basePriorities;
|
|
73
|
+
/**
|
|
74
|
+
* The providers the last `refresh(extensionManager)` read from the manager,
|
|
75
|
+
* by key, so the next one can drop those the manager no longer lists.
|
|
76
|
+
*/
|
|
77
|
+
private discovered;
|
|
78
|
+
/** Map key of a registration: providers of different kinds may share an id. */
|
|
79
|
+
private static keyOf;
|
|
66
80
|
/**
|
|
67
81
|
* Creates a new SpeechProviderResolver.
|
|
68
82
|
*
|
|
@@ -83,7 +97,10 @@ export declare class SpeechProviderResolver extends EventEmitter {
|
|
|
83
97
|
*/
|
|
84
98
|
constructor(config?: SpeechResolverConfig | undefined, env?: Record<string, string | undefined>);
|
|
85
99
|
/**
|
|
86
|
-
* Register a provider, overwriting any existing registration with the same
|
|
100
|
+
* Register a provider, overwriting any existing registration with the same
|
|
101
|
+
* kind and id. Re-registering at the priority the resolver shows (a preferred
|
|
102
|
+
* boost included), as `register({ ...entry, provider })` does, keeps the
|
|
103
|
+
* priority the provider was first registered with.
|
|
87
104
|
*
|
|
88
105
|
* Emits a `provider_registered` event with `{ id, kind, source }` so that
|
|
89
106
|
* listeners (e.g. UI dashboards, logging middleware) can track what's available.
|
|
@@ -213,17 +230,20 @@ export declare class SpeechProviderResolver extends EventEmitter {
|
|
|
213
230
|
* optionally discovering extension providers, and applying user-configured
|
|
214
231
|
* preferred priorities.
|
|
215
232
|
*
|
|
216
|
-
* The
|
|
217
|
-
* 1. `
|
|
233
|
+
* The refresh sequence is:
|
|
234
|
+
* 1. `discoverExtensionProviders()` — if an ExtensionManager is provided, read
|
|
235
|
+
* the speech providers it lists as active, and drop the ones an earlier
|
|
236
|
+
* refresh read from it that it no longer lists.
|
|
237
|
+
* 2. `registerCoreProviders()` — register all built-in providers from the
|
|
218
238
|
* static catalog, marking each as configured/unconfigured based on env vars.
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* 3. `applyPreferredPriorities()` — boost priority for providers listed in
|
|
239
|
+
* 3. Register the providers read in step 1, at priority 200.
|
|
240
|
+
* 4. `applyPreferredPriorities()` — boost priority for providers listed in
|
|
222
241
|
* the user's `config.stt.preferred` / `config.tts.preferred` arrays.
|
|
223
242
|
*
|
|
224
|
-
* @param extensionManager - Optional
|
|
225
|
-
*
|
|
226
|
-
*
|
|
243
|
+
* @param extensionManager - Optional `ExtensionManager` (its speech provider
|
|
244
|
+
* registries are read through `getRegistry(kind).listActive()`), or any
|
|
245
|
+
* object exposing `getDescriptorsByKind(kind)`. Uses `any` type because
|
|
246
|
+
* importing the ExtensionManager type here would create a circular dependency.
|
|
227
247
|
*
|
|
228
248
|
* @example
|
|
229
249
|
* ```ts
|
|
@@ -304,27 +324,43 @@ export declare class SpeechProviderResolver extends EventEmitter {
|
|
|
304
324
|
*/
|
|
305
325
|
private registerCoreProviders;
|
|
306
326
|
/**
|
|
307
|
-
*
|
|
308
|
-
* `
|
|
327
|
+
* Read the speech providers an ExtensionManager lists as active, as
|
|
328
|
+
* registrations for `refresh()` to register.
|
|
309
329
|
*
|
|
310
330
|
* Extension providers are registered with `priority: 200` (lower than core's
|
|
311
331
|
* 100) so they serve as fallbacks unless the user explicitly boosts them via
|
|
312
|
-
* `config.stt.preferred` / `config.tts.preferred`.
|
|
332
|
+
* `config.stt.preferred` / `config.tts.preferred`. Each is registered under
|
|
333
|
+
* the provider's own `id` (the descriptor id when the provider has none), the
|
|
334
|
+
* id preferred lists and `SpeechRuntime` use, and counts as configured: the
|
|
335
|
+
* pack built the instance with its own options and secrets.
|
|
313
336
|
*
|
|
314
337
|
* The `extensionManager` parameter uses `any` because the ExtensionManager
|
|
315
338
|
* type lives in the extensions package — importing it would create a circular
|
|
316
|
-
* dependency.
|
|
339
|
+
* dependency. An `ExtensionManager` is read through
|
|
340
|
+
* `getRegistry(kind).listActive()`; another object can expose
|
|
341
|
+
* `getDescriptorsByKind(kind)` instead.
|
|
317
342
|
*
|
|
318
|
-
* @param extensionManager -
|
|
319
|
-
*
|
|
343
|
+
* @param extensionManager - An `ExtensionManager`, or an object exposing
|
|
344
|
+
* `getDescriptorsByKind(kind)`; either returns `{ id: string; payload: unknown }`
|
|
345
|
+
* descriptors.
|
|
346
|
+
* @returns One registration per active descriptor that carries a provider.
|
|
320
347
|
*
|
|
321
348
|
* @example
|
|
322
349
|
* ```ts
|
|
323
350
|
* // Called internally by refresh():
|
|
324
|
-
* this.discoverExtensionProviders(extensionManager);
|
|
351
|
+
* const discovered = this.discoverExtensionProviders(extensionManager);
|
|
325
352
|
* ```
|
|
326
353
|
*/
|
|
327
354
|
private discoverExtensionProviders;
|
|
355
|
+
/**
|
|
356
|
+
* Remove the providers an earlier `refresh(extensionManager)` read that the
|
|
357
|
+
* manager no longer lists as active (an unloaded pack or a deactivated
|
|
358
|
+
* descriptor), so the resolve methods stop returning them. A registration
|
|
359
|
+
* that now holds a different provider is left alone.
|
|
360
|
+
*
|
|
361
|
+
* @param discovered - The registrations read from the manager this refresh.
|
|
362
|
+
*/
|
|
363
|
+
private dropProvidersNoLongerDiscovered;
|
|
328
364
|
/**
|
|
329
365
|
* Boost priority for providers listed in `config.stt.preferred` /
|
|
330
366
|
* `config.tts.preferred`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeechProviderResolver.d.ts","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"SpeechProviderResolver.d.ts","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IA8CpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IA9CtB;;;;;OAKG;IACH,OAAO,CAAC,aAAa,CAA2C;IAEhE;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAA6B;IAEnD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAA8B;IAEhD,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAC,KAAK;IAIpB;;;;;;;;;;;;;;;;;OAiBG;gBAEgB,MAAM,CAAC,EAAE,oBAAoB,YAAA,EAC7B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe;IAKxE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI;IAYzC;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,EAAE;IAM/D;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB;IAiBrE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB;IAgBrE;;;;;;;;;;;;;;;OAeG;IACH,UAAU,IAAI,iBAAiB;IAQ/B;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,IAAI,gBAAgB,GAAG,IAAI;IAS1C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,OAAO,CAAC,gBAAgB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,aAAa;IA4BrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,qBAAqB;IAsD7B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,OAAO,CAAC,0BAA0B;IAoDlC;;;;;;;OAOG;IACH,OAAO,CAAC,+BAA+B;IAUvC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,wBAAwB;CAmBjC"}
|
|
@@ -56,6 +56,10 @@ import { findSpeechProviderCatalogEntry } from './providerCatalog.js';
|
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export class SpeechProviderResolver extends EventEmitter {
|
|
59
|
+
/** Map key of a registration: providers of different kinds may share an id. */
|
|
60
|
+
static keyOf(kind, id) {
|
|
61
|
+
return `${kind}:${id}`;
|
|
62
|
+
}
|
|
59
63
|
/**
|
|
60
64
|
* Creates a new SpeechProviderResolver.
|
|
61
65
|
*
|
|
@@ -79,14 +83,29 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
79
83
|
this.config = config;
|
|
80
84
|
this.env = env;
|
|
81
85
|
/**
|
|
82
|
-
* Internal registry of all providers keyed by
|
|
83
|
-
*
|
|
84
|
-
*
|
|
86
|
+
* Internal registry of all providers, keyed by kind and id (`keyOf()`), so a
|
|
87
|
+
* speech-to-text and a text-to-speech provider can share an id. Overwrites
|
|
88
|
+
* are allowed — re-registering the same kind and id replaces the previous
|
|
89
|
+
* entry, which lets hot-reload and extension refresh work seamlessly.
|
|
85
90
|
*/
|
|
86
91
|
this.registrations = new Map();
|
|
92
|
+
/**
|
|
93
|
+
* The priority each provider was registered with. `refresh()` restores it
|
|
94
|
+
* before applying the preferred lists, so a provider that is no longer
|
|
95
|
+
* preferred loses its boost.
|
|
96
|
+
*/
|
|
97
|
+
this.basePriorities = new Map();
|
|
98
|
+
/**
|
|
99
|
+
* The providers the last `refresh(extensionManager)` read from the manager,
|
|
100
|
+
* by key, so the next one can drop those the manager no longer lists.
|
|
101
|
+
*/
|
|
102
|
+
this.discovered = new Map();
|
|
87
103
|
}
|
|
88
104
|
/**
|
|
89
|
-
* Register a provider, overwriting any existing registration with the same
|
|
105
|
+
* Register a provider, overwriting any existing registration with the same
|
|
106
|
+
* kind and id. Re-registering at the priority the resolver shows (a preferred
|
|
107
|
+
* boost included), as `register({ ...entry, provider })` does, keeps the
|
|
108
|
+
* priority the provider was first registered with.
|
|
90
109
|
*
|
|
91
110
|
* Emits a `provider_registered` event with `{ id, kind, source }` so that
|
|
92
111
|
* listeners (e.g. UI dashboards, logging middleware) can track what's available.
|
|
@@ -108,7 +127,13 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
108
127
|
* ```
|
|
109
128
|
*/
|
|
110
129
|
register(reg) {
|
|
111
|
-
|
|
130
|
+
const key = SpeechProviderResolver.keyOf(reg.kind, reg.id);
|
|
131
|
+
const current = this.registrations.get(key);
|
|
132
|
+
const base = current && reg.priority === current.priority
|
|
133
|
+
? (this.basePriorities.get(key) ?? reg.priority)
|
|
134
|
+
: reg.priority;
|
|
135
|
+
this.registrations.set(key, reg);
|
|
136
|
+
this.basePriorities.set(key, base);
|
|
112
137
|
this.emit('provider_registered', { id: reg.id, kind: reg.kind, source: reg.source });
|
|
113
138
|
}
|
|
114
139
|
/**
|
|
@@ -256,17 +281,20 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
256
281
|
* optionally discovering extension providers, and applying user-configured
|
|
257
282
|
* preferred priorities.
|
|
258
283
|
*
|
|
259
|
-
* The
|
|
260
|
-
* 1. `
|
|
284
|
+
* The refresh sequence is:
|
|
285
|
+
* 1. `discoverExtensionProviders()` — if an ExtensionManager is provided, read
|
|
286
|
+
* the speech providers it lists as active, and drop the ones an earlier
|
|
287
|
+
* refresh read from it that it no longer lists.
|
|
288
|
+
* 2. `registerCoreProviders()` — register all built-in providers from the
|
|
261
289
|
* static catalog, marking each as configured/unconfigured based on env vars.
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
* 3. `applyPreferredPriorities()` — boost priority for providers listed in
|
|
290
|
+
* 3. Register the providers read in step 1, at priority 200.
|
|
291
|
+
* 4. `applyPreferredPriorities()` — boost priority for providers listed in
|
|
265
292
|
* the user's `config.stt.preferred` / `config.tts.preferred` arrays.
|
|
266
293
|
*
|
|
267
|
-
* @param extensionManager - Optional
|
|
268
|
-
*
|
|
269
|
-
*
|
|
294
|
+
* @param extensionManager - Optional `ExtensionManager` (its speech provider
|
|
295
|
+
* registries are read through `getRegistry(kind).listActive()`), or any
|
|
296
|
+
* object exposing `getDescriptorsByKind(kind)`. Uses `any` type because
|
|
297
|
+
* importing the ExtensionManager type here would create a circular dependency.
|
|
270
298
|
*
|
|
271
299
|
* @example
|
|
272
300
|
* ```ts
|
|
@@ -276,9 +304,15 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
276
304
|
* ```
|
|
277
305
|
*/
|
|
278
306
|
async refresh(extensionManager) {
|
|
307
|
+
const discovered = extensionManager ? this.discoverExtensionProviders(extensionManager) : null;
|
|
308
|
+
if (discovered) {
|
|
309
|
+
this.dropProvidersNoLongerDiscovered(discovered);
|
|
310
|
+
}
|
|
279
311
|
this.registerCoreProviders();
|
|
280
|
-
if (
|
|
281
|
-
|
|
312
|
+
if (discovered) {
|
|
313
|
+
for (const reg of discovered)
|
|
314
|
+
this.register(reg);
|
|
315
|
+
this.discovered = new Map(discovered.map((reg) => [SpeechProviderResolver.keyOf(reg.kind, reg.id), reg.provider]));
|
|
282
316
|
}
|
|
283
317
|
this.applyPreferredPriorities();
|
|
284
318
|
}
|
|
@@ -316,7 +350,7 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
316
350
|
if (requirements?.preferredIds?.length) {
|
|
317
351
|
const results = [];
|
|
318
352
|
for (const id of requirements.preferredIds) {
|
|
319
|
-
const reg = this.registrations.get(id);
|
|
353
|
+
const reg = this.registrations.get(SpeechProviderResolver.keyOf(kind, id));
|
|
320
354
|
if (reg &&
|
|
321
355
|
reg.kind === kind &&
|
|
322
356
|
reg.isConfigured &&
|
|
@@ -418,7 +452,7 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
418
452
|
];
|
|
419
453
|
for (const def of coreProviders) {
|
|
420
454
|
// Keep an instance that SpeechRuntime or an extension registered under this id.
|
|
421
|
-
if (this.registrations.get(def.id)?.provider)
|
|
455
|
+
if (this.registrations.get(SpeechProviderResolver.keyOf(def.kind, def.id))?.provider)
|
|
422
456
|
continue;
|
|
423
457
|
const catalogEntry = findSpeechProviderCatalogEntry(def.id);
|
|
424
458
|
// Skip providers not found in the catalog (should not happen, but defensive)
|
|
@@ -442,24 +476,31 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
442
476
|
}
|
|
443
477
|
}
|
|
444
478
|
/**
|
|
445
|
-
*
|
|
446
|
-
* `
|
|
479
|
+
* Read the speech providers an ExtensionManager lists as active, as
|
|
480
|
+
* registrations for `refresh()` to register.
|
|
447
481
|
*
|
|
448
482
|
* Extension providers are registered with `priority: 200` (lower than core's
|
|
449
483
|
* 100) so they serve as fallbacks unless the user explicitly boosts them via
|
|
450
|
-
* `config.stt.preferred` / `config.tts.preferred`.
|
|
484
|
+
* `config.stt.preferred` / `config.tts.preferred`. Each is registered under
|
|
485
|
+
* the provider's own `id` (the descriptor id when the provider has none), the
|
|
486
|
+
* id preferred lists and `SpeechRuntime` use, and counts as configured: the
|
|
487
|
+
* pack built the instance with its own options and secrets.
|
|
451
488
|
*
|
|
452
489
|
* The `extensionManager` parameter uses `any` because the ExtensionManager
|
|
453
490
|
* type lives in the extensions package — importing it would create a circular
|
|
454
|
-
* dependency.
|
|
491
|
+
* dependency. An `ExtensionManager` is read through
|
|
492
|
+
* `getRegistry(kind).listActive()`; another object can expose
|
|
493
|
+
* `getDescriptorsByKind(kind)` instead.
|
|
455
494
|
*
|
|
456
|
-
* @param extensionManager -
|
|
457
|
-
*
|
|
495
|
+
* @param extensionManager - An `ExtensionManager`, or an object exposing
|
|
496
|
+
* `getDescriptorsByKind(kind)`; either returns `{ id: string; payload: unknown }`
|
|
497
|
+
* descriptors.
|
|
498
|
+
* @returns One registration per active descriptor that carries a provider.
|
|
458
499
|
*
|
|
459
500
|
* @example
|
|
460
501
|
* ```ts
|
|
461
502
|
* // Called internally by refresh():
|
|
462
|
-
* this.discoverExtensionProviders(extensionManager);
|
|
503
|
+
* const discovered = this.discoverExtensionProviders(extensionManager);
|
|
463
504
|
* ```
|
|
464
505
|
*/
|
|
465
506
|
discoverExtensionProviders(extensionManager) {
|
|
@@ -474,34 +515,58 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
474
515
|
'vad-provider': 'vad',
|
|
475
516
|
'wake-word-provider': 'wake-word',
|
|
476
517
|
};
|
|
518
|
+
const found = [];
|
|
477
519
|
for (const descriptorKind of Object.keys(kindMap)) {
|
|
478
|
-
const
|
|
520
|
+
const kind = kindMap[descriptorKind] ?? 'stt';
|
|
521
|
+
const descriptors = typeof extensionManager.getDescriptorsByKind === 'function'
|
|
522
|
+
? (extensionManager.getDescriptorsByKind(descriptorKind) ?? [])
|
|
523
|
+
: typeof extensionManager.getRegistry === 'function'
|
|
524
|
+
? (extensionManager.getRegistry(descriptorKind)?.listActive?.() ?? [])
|
|
525
|
+
: [];
|
|
479
526
|
for (const desc of descriptors) {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
id
|
|
489
|
-
kind
|
|
490
|
-
provider
|
|
527
|
+
const provider = desc?.payload;
|
|
528
|
+
if (!provider)
|
|
529
|
+
continue;
|
|
530
|
+
const id = typeof provider.id === 'string' && provider.id ? provider.id : desc.id;
|
|
531
|
+
// Known providers keep their catalog entry (capabilities); others get a
|
|
532
|
+
// synthetic one.
|
|
533
|
+
const catalogEntry = findSpeechProviderCatalogEntry(id);
|
|
534
|
+
found.push({
|
|
535
|
+
id,
|
|
536
|
+
kind,
|
|
537
|
+
provider,
|
|
491
538
|
catalogEntry: catalogEntry ?? {
|
|
492
|
-
id
|
|
493
|
-
kind
|
|
494
|
-
label:
|
|
539
|
+
id,
|
|
540
|
+
kind,
|
|
541
|
+
label: id,
|
|
495
542
|
envVars: [],
|
|
496
543
|
local: false,
|
|
497
544
|
description: '',
|
|
498
545
|
},
|
|
499
|
-
isConfigured,
|
|
546
|
+
isConfigured: true,
|
|
500
547
|
priority: 200, // Extensions rank below core by default
|
|
501
548
|
source: 'extension',
|
|
502
549
|
});
|
|
503
550
|
}
|
|
504
551
|
}
|
|
552
|
+
return found;
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Remove the providers an earlier `refresh(extensionManager)` read that the
|
|
556
|
+
* manager no longer lists as active (an unloaded pack or a deactivated
|
|
557
|
+
* descriptor), so the resolve methods stop returning them. A registration
|
|
558
|
+
* that now holds a different provider is left alone.
|
|
559
|
+
*
|
|
560
|
+
* @param discovered - The registrations read from the manager this refresh.
|
|
561
|
+
*/
|
|
562
|
+
dropProvidersNoLongerDiscovered(discovered) {
|
|
563
|
+
const current = new Set(discovered.map((reg) => SpeechProviderResolver.keyOf(reg.kind, reg.id)));
|
|
564
|
+
for (const [key, provider] of this.discovered) {
|
|
565
|
+
if (!current.has(key) && this.registrations.get(key)?.provider === provider) {
|
|
566
|
+
this.registrations.delete(key);
|
|
567
|
+
this.basePriorities.delete(key);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
505
570
|
}
|
|
506
571
|
/**
|
|
507
572
|
* Boost priority for providers listed in `config.stt.preferred` /
|
|
@@ -521,16 +586,21 @@ export class SpeechProviderResolver extends EventEmitter {
|
|
|
521
586
|
* ```
|
|
522
587
|
*/
|
|
523
588
|
applyPreferredPriorities() {
|
|
589
|
+
// Start from the registered priorities, so a provider dropped from a
|
|
590
|
+
// preferred list does not keep the boost an earlier refresh gave it.
|
|
591
|
+
for (const [key, reg] of this.registrations) {
|
|
592
|
+
reg.priority = this.basePriorities.get(key) ?? reg.priority;
|
|
593
|
+
}
|
|
524
594
|
if (this.config?.stt?.preferred) {
|
|
525
595
|
for (let i = 0; i < this.config.stt.preferred.length; i++) {
|
|
526
|
-
const reg = this.registrations.get(this.config.stt.preferred[i]);
|
|
596
|
+
const reg = this.registrations.get(SpeechProviderResolver.keyOf('stt', this.config.stt.preferred[i]));
|
|
527
597
|
if (reg)
|
|
528
598
|
reg.priority = 50 + i;
|
|
529
599
|
}
|
|
530
600
|
}
|
|
531
601
|
if (this.config?.tts?.preferred) {
|
|
532
602
|
for (let i = 0; i < this.config.tts.preferred.length; i++) {
|
|
533
|
-
const reg = this.registrations.get(this.config.tts.preferred[i]);
|
|
603
|
+
const reg = this.registrations.get(SpeechProviderResolver.keyOf('tts', this.config.tts.preferred[i]));
|
|
534
604
|
if (reg)
|
|
535
605
|
reg.priority = 50 + i;
|
|
536
606
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeechProviderResolver.js","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SpeechProviderResolver.js","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framers/agentos",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.4",
|
|
4
4
|
"description": "AgentOS: open-source TypeScript framework for autonomous AI agents. Unified graph orchestration, cognitive memory, runtime tool forging, multi-tier guardrails, voice pipeline, and 11 LLM providers.",
|
|
5
5
|
"homepage": "https://agentos.sh",
|
|
6
6
|
"repository": {
|