@dexto/core 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/DextoAgent.cjs +10 -16
- package/dist/agent/DextoAgent.d.ts +2 -2
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +8 -5
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/context/compaction/overflow.d.ts +1 -1
- package/dist/context/compaction/overflow.d.ts.map +1 -1
- package/dist/context/manager.cjs +8 -8
- package/dist/context/manager.d.ts +1 -1
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +1 -1
- package/dist/context/types.d.ts +1 -1
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/utils.cjs +3 -3
- package/dist/context/utils.d.ts +1 -1
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +1 -1
- package/dist/events/index.d.ts +2 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/index.browser.cjs +9 -9
- package/dist/index.browser.d.ts +4 -4
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/llm/auth/index.cjs +16 -0
- package/dist/llm/auth/index.d.ts +2 -0
- package/dist/llm/auth/index.d.ts.map +1 -0
- package/dist/llm/auth/index.js +0 -0
- package/dist/llm/auth/types.cjs +16 -0
- package/dist/llm/auth/types.d.ts +25 -0
- package/dist/llm/auth/types.d.ts.map +1 -0
- package/dist/llm/auth/types.js +0 -0
- package/dist/llm/curation-config.cjs +3 -3
- package/dist/llm/curation-config.d.ts +1 -1
- package/dist/llm/curation-config.js +3 -3
- package/dist/llm/curation.cjs +2 -2
- package/dist/llm/curation.d.ts +2 -2
- package/dist/llm/curation.d.ts.map +1 -1
- package/dist/llm/curation.js +1 -1
- package/dist/llm/errors.cjs +3 -3
- package/dist/llm/errors.d.ts +1 -1
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +1 -1
- package/dist/llm/executor/provider-options.cjs +22 -25
- package/dist/llm/executor/provider-options.d.ts +1 -1
- package/dist/llm/executor/provider-options.d.ts.map +1 -1
- package/dist/llm/executor/provider-options.js +17 -16
- package/dist/llm/executor/stream-processor.d.ts +1 -1
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.d.ts +1 -1
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/types.d.ts +1 -1
- package/dist/llm/executor/types.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.cjs +2 -2
- package/dist/llm/formatters/vercel.d.ts +1 -1
- package/dist/llm/formatters/vercel.d.ts.map +1 -1
- package/dist/llm/index.cjs +0 -4
- package/dist/llm/index.d.ts +1 -2
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +0 -2
- package/dist/llm/registry/auto-update.cjs +5 -5
- package/dist/llm/registry/auto-update.d.ts.map +1 -1
- package/dist/llm/registry/auto-update.js +2 -2
- package/dist/llm/registry/index.cjs +96 -789
- package/dist/llm/registry/index.d.ts +4 -323
- package/dist/llm/registry/index.d.ts.map +1 -1
- package/dist/llm/registry/index.js +99 -762
- package/dist/llm/registry/sync.d.ts +2 -2
- package/dist/llm/registry/sync.d.ts.map +1 -1
- package/dist/llm/resolver.cjs +7 -6
- package/dist/llm/resolver.d.ts +1 -1
- package/dist/llm/resolver.js +4 -4
- package/dist/llm/schemas.cjs +14 -14
- package/dist/llm/schemas.d.ts +1 -1
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +5 -4
- package/dist/llm/services/factory.cjs +124 -33
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +128 -35
- package/dist/llm/services/types.d.ts +8 -1
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/usage-metadata.cjs +3 -3
- package/dist/llm/usage-metadata.d.ts +2 -2
- package/dist/llm/usage-metadata.d.ts.map +1 -1
- package/dist/llm/usage-metadata.js +1 -4
- package/dist/llm/usage-summary.d.ts +1 -1
- package/dist/llm/validation.cjs +4 -4
- package/dist/llm/validation.d.ts +1 -1
- package/dist/llm/validation.js +1 -1
- package/dist/session/chat-session.cjs +2 -12
- package/dist/session/chat-session.d.ts +2 -0
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +2 -13
- package/dist/session/session-manager.cjs +4 -1
- package/dist/session/session-manager.d.ts +5 -1
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +4 -1
- package/dist/utils/api-key-resolver.d.ts +1 -1
- package/dist/utils/api-key-resolver.d.ts.map +1 -1
- package/dist/utils/result.cjs +1 -1
- package/dist/utils/result.js +1 -1
- package/dist/utils/service-initializer.cjs +3 -0
- package/dist/utils/service-initializer.d.ts +2 -0
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +3 -0
- package/package.json +3 -2
- package/dist/llm/reasoning/anthropic-betas.cjs +0 -31
- package/dist/llm/reasoning/anthropic-betas.d.ts +0 -3
- package/dist/llm/reasoning/anthropic-betas.d.ts.map +0 -1
- package/dist/llm/reasoning/anthropic-betas.js +0 -7
- package/dist/llm/reasoning/anthropic-thinking.cjs +0 -79
- package/dist/llm/reasoning/anthropic-thinking.d.ts +0 -15
- package/dist/llm/reasoning/anthropic-thinking.d.ts.map +0 -1
- package/dist/llm/reasoning/anthropic-thinking.js +0 -52
- package/dist/llm/reasoning/openai-reasoning-effort.cjs +0 -86
- package/dist/llm/reasoning/openai-reasoning-effort.d.ts +0 -5
- package/dist/llm/reasoning/openai-reasoning-effort.d.ts.map +0 -1
- package/dist/llm/reasoning/openai-reasoning-effort.js +0 -61
- package/dist/llm/reasoning/profile.cjs +0 -113
- package/dist/llm/reasoning/profile.d.ts +0 -13
- package/dist/llm/reasoning/profile.d.ts.map +0 -1
- package/dist/llm/reasoning/profile.js +0 -92
- package/dist/llm/reasoning/profiles/anthropic.cjs +0 -61
- package/dist/llm/reasoning/profiles/anthropic.d.ts +0 -8
- package/dist/llm/reasoning/profiles/anthropic.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/anthropic.js +0 -45
- package/dist/llm/reasoning/profiles/bedrock.cjs +0 -54
- package/dist/llm/reasoning/profiles/bedrock.d.ts +0 -3
- package/dist/llm/reasoning/profiles/bedrock.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/bedrock.js +0 -36
- package/dist/llm/reasoning/profiles/google.cjs +0 -45
- package/dist/llm/reasoning/profiles/google.d.ts +0 -9
- package/dist/llm/reasoning/profiles/google.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/google.js +0 -21
- package/dist/llm/reasoning/profiles/openai-compatible.cjs +0 -39
- package/dist/llm/reasoning/profiles/openai-compatible.d.ts +0 -3
- package/dist/llm/reasoning/profiles/openai-compatible.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/openai-compatible.js +0 -16
- package/dist/llm/reasoning/profiles/openai.cjs +0 -41
- package/dist/llm/reasoning/profiles/openai.d.ts +0 -3
- package/dist/llm/reasoning/profiles/openai.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/openai.js +0 -18
- package/dist/llm/reasoning/profiles/openrouter.cjs +0 -83
- package/dist/llm/reasoning/profiles/openrouter.d.ts +0 -10
- package/dist/llm/reasoning/profiles/openrouter.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/openrouter.js +0 -59
- package/dist/llm/reasoning/profiles/shared.cjs +0 -80
- package/dist/llm/reasoning/profiles/shared.d.ts +0 -25
- package/dist/llm/reasoning/profiles/shared.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/shared.js +0 -53
- package/dist/llm/reasoning/profiles/vertex.cjs +0 -46
- package/dist/llm/reasoning/profiles/vertex.d.ts +0 -3
- package/dist/llm/reasoning/profiles/vertex.d.ts.map +0 -1
- package/dist/llm/reasoning/profiles/vertex.js +0 -23
- package/dist/llm/registry/models.generated.cjs +0 -10741
- package/dist/llm/registry/models.generated.d.ts +0 -2945
- package/dist/llm/registry/models.generated.d.ts.map +0 -1
- package/dist/llm/registry/models.generated.js +0 -10717
- package/dist/llm/registry/models.manual.cjs +0 -44
- package/dist/llm/registry/models.manual.d.ts +0 -22
- package/dist/llm/registry/models.manual.d.ts.map +0 -1
- package/dist/llm/registry/models.manual.js +0 -21
- package/dist/llm/types.cjs +0 -55
- package/dist/llm/types.d.ts +0 -39
- package/dist/llm/types.d.ts.map +0 -1
- package/dist/llm/types.js +0 -30
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { LLMProvider } from '
|
|
2
|
-
import type { ModelInfo } from '
|
|
1
|
+
import type { LLMProvider } from '@dexto/llm';
|
|
2
|
+
import type { ModelInfo } from '@dexto/llm';
|
|
3
3
|
export declare const MODELS_DEV_URL = "https://models.dev/api.json";
|
|
4
4
|
type ModelsDevApi = Record<string, ModelsDevProvider>;
|
|
5
5
|
type ModelsDevProvider = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/llm/registry/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/llm/registry/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,eAAO,MAAM,cAAc,gCAAgC,CAAC;AAE5D,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACtD,KAAK,iBAAiB,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C,CAAC;AACF,KAAK,cAAc,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,KAAK,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EACL;QACI,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;KAC/D,GACD,SAAS,CAAC;IAChB,IAAI,CAAC,EACC;QACI,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GACD,SAAS,CAAC;CACnB,CAAC;AA2CF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CA6J7D;AAmKD,wBAAgB,sCAAsC,CAAC,MAAM,EAAE;IAC3D,YAAY,EAAE,YAAY,CAAC;CAC9B,GAAG,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAuJnC;AAED,wBAAsB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAoB5C"}
|
package/dist/llm/resolver.cjs
CHANGED
|
@@ -27,6 +27,7 @@ var import_result = require("../utils/result.js");
|
|
|
27
27
|
var import_types = require("../errors/types.js");
|
|
28
28
|
var import_error_codes = require("./error-codes.js");
|
|
29
29
|
var import_schemas2 = require("./schemas.js");
|
|
30
|
+
var import_llm = require("@dexto/llm");
|
|
30
31
|
var import_registry = require("./registry/index.js");
|
|
31
32
|
var import_openrouter_model_registry = require("./providers/openrouter-model-registry.js");
|
|
32
33
|
var import_api_key_resolver = require("../utils/api-key-resolver.js");
|
|
@@ -43,7 +44,7 @@ async function resolveLLMConfig(previous, updates, logger) {
|
|
|
43
44
|
const warnings = [];
|
|
44
45
|
const provider = updates.provider ?? (updates.model && !updates.model.includes("/") ? (() => {
|
|
45
46
|
try {
|
|
46
|
-
return (0,
|
|
47
|
+
return (0, import_llm.getProviderFromModel)(updates.model);
|
|
47
48
|
} catch {
|
|
48
49
|
return previous.provider;
|
|
49
50
|
}
|
|
@@ -70,8 +71,8 @@ async function resolveLLMConfig(previous, updates, logger) {
|
|
|
70
71
|
});
|
|
71
72
|
}
|
|
72
73
|
let model = updates.model ?? previous.model;
|
|
73
|
-
if (provider !== previous.provider && !(0,
|
|
74
|
-
model = (0,
|
|
74
|
+
if (provider !== previous.provider && !(0, import_llm.acceptsAnyModel)(provider) && !(0, import_llm.supportsCustomModels)(provider) && !(0, import_llm.isValidProviderModel)(provider, model)) {
|
|
75
|
+
model = (0, import_llm.getDefaultModelForProvider)(provider) ?? previous.model;
|
|
75
76
|
warnings.push({
|
|
76
77
|
code: import_error_codes.LLMErrorCode.MODEL_INCOMPATIBLE,
|
|
77
78
|
message: `Model set to default '${model}' for provider '${provider}'`,
|
|
@@ -81,8 +82,8 @@ async function resolveLLMConfig(previous, updates, logger) {
|
|
|
81
82
|
context: { provider, model }
|
|
82
83
|
});
|
|
83
84
|
}
|
|
84
|
-
if (provider !== previous.provider && updates.model == null && (0,
|
|
85
|
-
const defaultGatewayModel = (0,
|
|
85
|
+
if (provider !== previous.provider && updates.model == null && (0, import_llm.hasAllRegistryModelsSupport)(provider) && !model.includes("/")) {
|
|
86
|
+
const defaultGatewayModel = (0, import_llm.getDefaultModelForProvider)(provider);
|
|
86
87
|
if (defaultGatewayModel) {
|
|
87
88
|
model = defaultGatewayModel;
|
|
88
89
|
warnings.push({
|
|
@@ -98,7 +99,7 @@ async function resolveLLMConfig(previous, updates, logger) {
|
|
|
98
99
|
let baseURL;
|
|
99
100
|
if (updates.baseURL) {
|
|
100
101
|
baseURL = updates.baseURL;
|
|
101
|
-
} else if ((0,
|
|
102
|
+
} else if ((0, import_llm.supportsBaseURL)(provider)) {
|
|
102
103
|
baseURL = previous.baseURL;
|
|
103
104
|
} else {
|
|
104
105
|
baseURL = void 0;
|
package/dist/llm/resolver.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Result } from '../utils/result.js';
|
|
2
2
|
import { Issue } from '../errors/types.js';
|
|
3
3
|
import { type ValidatedLLMConfig, type LLMUpdates, type LLMConfig } from './schemas.js';
|
|
4
|
-
import type { LLMUpdateContext } from '
|
|
4
|
+
import type { LLMUpdateContext } from '@dexto/llm';
|
|
5
5
|
import type { Logger } from '../logger/v2/types.js';
|
|
6
6
|
/**
|
|
7
7
|
* Convenience function that combines resolveLLM and validateLLM
|
package/dist/llm/resolver.js
CHANGED
|
@@ -6,13 +6,13 @@ import { LLMConfigSchema } from "./schemas.js";
|
|
|
6
6
|
import {
|
|
7
7
|
getDefaultModelForProvider,
|
|
8
8
|
acceptsAnyModel,
|
|
9
|
-
getProviderFromModel,
|
|
10
9
|
isValidProviderModel,
|
|
11
|
-
getEffectiveMaxInputTokens,
|
|
12
10
|
supportsBaseURL,
|
|
13
11
|
supportsCustomModels,
|
|
14
|
-
hasAllRegistryModelsSupport
|
|
15
|
-
|
|
12
|
+
hasAllRegistryModelsSupport,
|
|
13
|
+
getProviderFromModel
|
|
14
|
+
} from "@dexto/llm";
|
|
15
|
+
import { getEffectiveMaxInputTokens } from "./registry/index.js";
|
|
16
16
|
import {
|
|
17
17
|
lookupOpenRouterModel,
|
|
18
18
|
refreshOpenRouterModelCache
|
package/dist/llm/schemas.cjs
CHANGED
|
@@ -28,11 +28,11 @@ var import_types = require("../errors/types.js");
|
|
|
28
28
|
var import_errors = require("../errors/index.js");
|
|
29
29
|
var import_result = require("../utils/result.js");
|
|
30
30
|
var import_zod = require("zod");
|
|
31
|
+
var import_llm = require("@dexto/llm");
|
|
31
32
|
var import_registry = require("./registry/index.js");
|
|
32
|
-
var
|
|
33
|
-
var import_profile = require("./reasoning/profile.js");
|
|
33
|
+
var import_llm2 = require("@dexto/llm");
|
|
34
34
|
const LLMConfigFields = {
|
|
35
|
-
provider: import_zod.z.enum(
|
|
35
|
+
provider: import_zod.z.enum(import_llm2.LLM_PROVIDERS).describe("LLM provider (e.g., 'openai', 'anthropic', 'google', 'groq')"),
|
|
36
36
|
model: import_result.NonEmptyTrimmed.describe("Specific model name for the selected provider"),
|
|
37
37
|
// Expand $ENV refs and trim; final validation happens with provider context
|
|
38
38
|
// Optional for providers that don't need API keys (Ollama, vLLM, etc.)
|
|
@@ -76,7 +76,7 @@ const LLMConfigBaseSchema = import_zod.z.object({
|
|
|
76
76
|
const LLMConfigSchema = LLMConfigBaseSchema.superRefine((data, ctx) => {
|
|
77
77
|
const baseURLIsSet = data.baseURL != null && data.baseURL.trim() !== "";
|
|
78
78
|
const maxInputTokensIsSet = data.maxInputTokens != null;
|
|
79
|
-
if ((0,
|
|
79
|
+
if ((0, import_llm.hasAllRegistryModelsSupport)(data.provider) && !data.model.includes("/")) {
|
|
80
80
|
ctx.addIssue({
|
|
81
81
|
code: import_zod.z.ZodIssueCode.custom,
|
|
82
82
|
path: ["model"],
|
|
@@ -89,7 +89,7 @@ const LLMConfigSchema = LLMConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
if (baseURLIsSet) {
|
|
92
|
-
if (!(0,
|
|
92
|
+
if (!(0, import_llm.supportsBaseURL)(data.provider)) {
|
|
93
93
|
ctx.addIssue({
|
|
94
94
|
code: import_zod.z.ZodIssueCode.custom,
|
|
95
95
|
path: ["provider"],
|
|
@@ -102,10 +102,10 @@ const LLMConfigSchema = LLMConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
-
if (!baseURLIsSet || (0,
|
|
106
|
-
if (!(0,
|
|
107
|
-
const supportedModelsList = (0,
|
|
108
|
-
if (!(0,
|
|
105
|
+
if (!baseURLIsSet || (0, import_llm.supportsBaseURL)(data.provider)) {
|
|
106
|
+
if (!(0, import_llm.acceptsAnyModel)(data.provider) && !(0, import_llm.supportsCustomModels)(data.provider)) {
|
|
107
|
+
const supportedModelsList = (0, import_llm.getSupportedModels)(data.provider);
|
|
108
|
+
if (!(0, import_llm.isValidProviderModel)(data.provider, data.model)) {
|
|
109
109
|
ctx.addIssue({
|
|
110
110
|
code: import_zod.z.ZodIssueCode.custom,
|
|
111
111
|
path: ["model"],
|
|
@@ -118,7 +118,7 @@ const LLMConfigSchema = LLMConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
-
if (maxInputTokensIsSet && !(0,
|
|
121
|
+
if (maxInputTokensIsSet && !(0, import_llm.acceptsAnyModel)(data.provider) && !(0, import_llm.supportsCustomModels)(data.provider)) {
|
|
122
122
|
try {
|
|
123
123
|
const cap = (0, import_registry.getMaxInputTokensForModel)(data.provider, data.model);
|
|
124
124
|
if (data.maxInputTokens > cap) {
|
|
@@ -162,10 +162,10 @@ const LLMConfigSchema = LLMConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
if (data.reasoning) {
|
|
165
|
-
const profile = (0,
|
|
165
|
+
const profile = (0, import_llm.getReasoningProfile)(data.provider, data.model);
|
|
166
166
|
const variant = data.reasoning.variant;
|
|
167
167
|
const budgetTokens = data.reasoning.budgetTokens;
|
|
168
|
-
if (!(0,
|
|
168
|
+
if (!(0, import_llm.supportsReasoningVariant)(profile, variant)) {
|
|
169
169
|
ctx.addIssue({
|
|
170
170
|
code: import_zod.z.ZodIssueCode.custom,
|
|
171
171
|
path: ["reasoning", "variant"],
|
|
@@ -205,10 +205,10 @@ const LLMUpdatesSchema = import_zod.z.object({
|
|
|
205
205
|
});
|
|
206
206
|
}
|
|
207
207
|
if (data.reasoning && data.reasoning !== null && typeof data.provider === "string" && typeof data.model === "string") {
|
|
208
|
-
const profile = (0,
|
|
208
|
+
const profile = (0, import_llm.getReasoningProfile)(data.provider, data.model);
|
|
209
209
|
const variant = data.reasoning.variant;
|
|
210
210
|
const budgetTokens = data.reasoning.budgetTokens;
|
|
211
|
-
if (!(0,
|
|
211
|
+
if (!(0, import_llm.supportsReasoningVariant)(profile, variant)) {
|
|
212
212
|
ctx.addIssue({
|
|
213
213
|
code: import_zod.z.ZodIssueCode.custom,
|
|
214
214
|
path: ["reasoning", "variant"],
|
package/dist/llm/schemas.d.ts
CHANGED
|
@@ -109,5 +109,5 @@ export declare const LLMUpdatesSchema: z.ZodObject<{
|
|
|
109
109
|
allowedMediaTypes: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
110
110
|
}, z.core.$strip>;
|
|
111
111
|
export type LLMUpdates = z.input<typeof LLMUpdatesSchema>;
|
|
112
|
-
export type { LLMUpdateContext } from '
|
|
112
|
+
export type { LLMUpdateContext } from '@dexto/llm';
|
|
113
113
|
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/llm/schemas.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/llm/schemas.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwFxB,4CAA4C;AAG5C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAiBnB,CAAC;AAEd;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyJ1B,CAAC;AAGH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAIlE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4DvB,CAAC;AACP,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/llm/schemas.js
CHANGED
|
@@ -10,11 +10,12 @@ import {
|
|
|
10
10
|
supportsCustomModels,
|
|
11
11
|
hasAllRegistryModelsSupport,
|
|
12
12
|
getSupportedModels,
|
|
13
|
+
getReasoningProfile,
|
|
13
14
|
isValidProviderModel,
|
|
14
|
-
|
|
15
|
-
} from "
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
15
|
+
supportsReasoningVariant
|
|
16
|
+
} from "@dexto/llm";
|
|
17
|
+
import { getMaxInputTokensForModel } from "./registry/index.js";
|
|
18
|
+
import { LLM_PROVIDERS } from "@dexto/llm";
|
|
18
19
|
const LLMConfigFields = {
|
|
19
20
|
provider: z.enum(LLM_PROVIDERS).describe("LLM provider (e.g., 'openai', 'anthropic', 'google', 'groq')"),
|
|
20
21
|
model: NonEmptyTrimmed.describe("Specific model name for the selected provider"),
|
|
@@ -36,13 +36,11 @@ var import_ai_sdk_provider = require("@openrouter/ai-sdk-provider");
|
|
|
36
36
|
var import_vercel = require("./vercel.js");
|
|
37
37
|
var import_cohere = require("@ai-sdk/cohere");
|
|
38
38
|
var import_ai_sdk_adapter = require("../providers/local/ai-sdk-adapter.js");
|
|
39
|
-
var
|
|
39
|
+
var import_llm = require("@dexto/llm");
|
|
40
40
|
var import_api_key_resolver = require("../../utils/api-key-resolver.js");
|
|
41
41
|
var import_codex_app_server = require("../providers/codex-app-server.js");
|
|
42
42
|
var import_codex_base_url = require("../providers/codex-base-url.js");
|
|
43
43
|
var import_execution_context = require("../../utils/execution-context.js");
|
|
44
|
-
var import_anthropic_betas = require("../reasoning/anthropic-betas.js");
|
|
45
|
-
var import_anthropic_thinking = require("../reasoning/anthropic-thinking.js");
|
|
46
44
|
function isLanguageModel(value) {
|
|
47
45
|
if (!value || typeof value !== "object") return false;
|
|
48
46
|
const candidate = value;
|
|
@@ -77,34 +75,95 @@ function resolveProviderWorkingDirectory(explicitCwd) {
|
|
|
77
75
|
}
|
|
78
76
|
return (0, import_execution_context.findDextoProjectRoot)(process.cwd()) ?? process.cwd();
|
|
79
77
|
}
|
|
78
|
+
function mergeHeaders(base, override) {
|
|
79
|
+
const merged = {
|
|
80
|
+
...base ?? {},
|
|
81
|
+
...override ?? {}
|
|
82
|
+
};
|
|
83
|
+
return Object.keys(merged).length > 0 ? merged : void 0;
|
|
84
|
+
}
|
|
85
|
+
function logRuntimeAuthResolution(input) {
|
|
86
|
+
const {
|
|
87
|
+
context,
|
|
88
|
+
provider,
|
|
89
|
+
model,
|
|
90
|
+
configApiKey,
|
|
91
|
+
resolvedApiKey,
|
|
92
|
+
runtimeAuth,
|
|
93
|
+
effectiveBaseURL
|
|
94
|
+
} = input;
|
|
95
|
+
if (!context?.logger) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const auth = runtimeAuth?.auth ?? (configApiKey?.trim() ? { source: "config_api_key" } : resolvedApiKey?.trim() ? { source: "environment", envVar: (0, import_api_key_resolver.getPrimaryApiKeyEnvVar)(provider) } : { source: "none" });
|
|
99
|
+
context.logger.info("LLM runtime auth resolved", {
|
|
100
|
+
provider,
|
|
101
|
+
model,
|
|
102
|
+
auth,
|
|
103
|
+
runtime: {
|
|
104
|
+
hasRuntimeFetch: Boolean(runtimeAuth?.fetch),
|
|
105
|
+
hasRuntimeHeaders: Boolean(runtimeAuth?.headers),
|
|
106
|
+
hasRuntimeBaseURL: Boolean(runtimeAuth?.baseURL),
|
|
107
|
+
hasEffectiveBaseURL: Boolean(effectiveBaseURL)
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
80
111
|
function createVercelModel(llmConfig, context) {
|
|
81
112
|
const { provider, model, baseURL } = llmConfig;
|
|
82
|
-
const
|
|
83
|
-
|
|
113
|
+
const runtimeAuth = context?.authResolver?.resolveRuntimeAuth({
|
|
114
|
+
provider,
|
|
115
|
+
model,
|
|
116
|
+
apiKey: llmConfig.apiKey,
|
|
117
|
+
baseURL
|
|
118
|
+
}) ?? null;
|
|
119
|
+
const resolvedProviderApiKey = (0, import_api_key_resolver.resolveApiKeyForProvider)(provider);
|
|
120
|
+
const apiKey = runtimeAuth?.apiKey || llmConfig.apiKey || resolvedProviderApiKey;
|
|
121
|
+
const runtimeBaseURL = runtimeAuth?.baseURL;
|
|
122
|
+
const runtimeHeaders = runtimeAuth?.headers;
|
|
123
|
+
const runtimeFetch = runtimeAuth?.fetch;
|
|
124
|
+
const effectiveBaseURL = runtimeBaseURL?.replace(/\/$/, "") || baseURL?.replace(/\/$/, "");
|
|
125
|
+
const usesCodexRuntimeAuth = runtimeBaseURL ? (0, import_codex_base_url.isCodexBaseURL)(runtimeBaseURL) : false;
|
|
126
|
+
logRuntimeAuthResolution({
|
|
127
|
+
context,
|
|
128
|
+
provider,
|
|
129
|
+
model,
|
|
130
|
+
configApiKey: llmConfig.apiKey,
|
|
131
|
+
resolvedApiKey: resolvedProviderApiKey,
|
|
132
|
+
runtimeAuth,
|
|
133
|
+
effectiveBaseURL
|
|
134
|
+
});
|
|
135
|
+
if ((0, import_llm.requiresApiKey)(provider) && !usesCodexRuntimeAuth && !apiKey?.trim()) {
|
|
84
136
|
const envVar = (0, import_api_key_resolver.getPrimaryApiKeyEnvVar)(provider);
|
|
85
137
|
throw import_errors.LLMError.apiKeyMissing(provider, envVar);
|
|
86
138
|
}
|
|
87
139
|
switch (provider.toLowerCase()) {
|
|
88
140
|
case "openai": {
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
case "openai-compatible": {
|
|
92
|
-
const compatibleBaseURL = baseURL?.replace(/\/$/, "") || process.env.OPENAI_BASE_URL?.replace(/\/$/, "");
|
|
93
|
-
if (!compatibleBaseURL) {
|
|
94
|
-
throw import_errors.LLMError.baseUrlMissing("openai-compatible");
|
|
95
|
-
}
|
|
96
|
-
if ((0, import_codex_base_url.isCodexBaseURL)(compatibleBaseURL)) {
|
|
141
|
+
if (usesCodexRuntimeAuth && runtimeBaseURL) {
|
|
97
142
|
return (0, import_codex_app_server.createCodexLanguageModel)({
|
|
98
143
|
modelId: model,
|
|
99
|
-
baseURL:
|
|
144
|
+
baseURL: runtimeBaseURL,
|
|
100
145
|
cwd: resolveProviderWorkingDirectory(context?.cwd),
|
|
101
146
|
...context?.onCodexRateLimitStatus ? { onRateLimitStatus: context.onCodexRateLimitStatus } : {}
|
|
102
147
|
});
|
|
103
148
|
}
|
|
149
|
+
return (0, import_openai.createOpenAI)({
|
|
150
|
+
apiKey: apiKey ?? "",
|
|
151
|
+
...effectiveBaseURL ? { baseURL: effectiveBaseURL } : {},
|
|
152
|
+
...runtimeHeaders ? { headers: runtimeHeaders } : {},
|
|
153
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
154
|
+
}).responses(model);
|
|
155
|
+
}
|
|
156
|
+
case "openai-compatible": {
|
|
157
|
+
const compatibleBaseURL = effectiveBaseURL || process.env.OPENAI_BASE_URL?.replace(/\/$/, "");
|
|
158
|
+
if (!compatibleBaseURL) {
|
|
159
|
+
throw import_errors.LLMError.baseUrlMissing("openai-compatible");
|
|
160
|
+
}
|
|
104
161
|
const provider2 = (0, import_openai_compatible.createOpenAICompatible)({
|
|
105
162
|
name: "openaiCompatible",
|
|
106
163
|
baseURL: compatibleBaseURL,
|
|
107
|
-
...apiKey?.trim() ? { apiKey } : {}
|
|
164
|
+
...apiKey?.trim() ? { apiKey } : {},
|
|
165
|
+
...runtimeHeaders ? { headers: runtimeHeaders } : {},
|
|
166
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
108
167
|
});
|
|
109
168
|
return provider2.chatModel(model);
|
|
110
169
|
}
|
|
@@ -126,26 +185,47 @@ function createVercelModel(llmConfig, context) {
|
|
|
126
185
|
return chatModel;
|
|
127
186
|
}
|
|
128
187
|
case "minimax": {
|
|
129
|
-
const minimaxBaseURL =
|
|
130
|
-
return (0, import_openai.createOpenAI)({
|
|
188
|
+
const minimaxBaseURL = effectiveBaseURL || "https://api.minimax.chat/v1";
|
|
189
|
+
return (0, import_openai.createOpenAI)({
|
|
190
|
+
apiKey: apiKey ?? "",
|
|
191
|
+
baseURL: minimaxBaseURL,
|
|
192
|
+
...runtimeHeaders ? { headers: runtimeHeaders } : {},
|
|
193
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
194
|
+
}).chat(model);
|
|
131
195
|
}
|
|
132
196
|
case "glm": {
|
|
133
|
-
const glmBaseURL =
|
|
134
|
-
return (0, import_openai.createOpenAI)({
|
|
197
|
+
const glmBaseURL = effectiveBaseURL || "https://open.bigmodel.cn/api/paas/v4";
|
|
198
|
+
return (0, import_openai.createOpenAI)({
|
|
199
|
+
apiKey: apiKey ?? "",
|
|
200
|
+
baseURL: glmBaseURL,
|
|
201
|
+
...runtimeHeaders ? { headers: runtimeHeaders } : {},
|
|
202
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
203
|
+
}).chat(model);
|
|
135
204
|
}
|
|
136
205
|
case "litellm": {
|
|
137
|
-
if (!
|
|
206
|
+
if (!effectiveBaseURL) {
|
|
138
207
|
throw import_errors.LLMError.baseUrlMissing("litellm");
|
|
139
208
|
}
|
|
140
|
-
return (0, import_openai.createOpenAI)({
|
|
209
|
+
return (0, import_openai.createOpenAI)({
|
|
210
|
+
apiKey: apiKey ?? "",
|
|
211
|
+
baseURL: effectiveBaseURL,
|
|
212
|
+
...runtimeHeaders ? { headers: runtimeHeaders } : {},
|
|
213
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
214
|
+
}).chat(model);
|
|
141
215
|
}
|
|
142
216
|
case "glama": {
|
|
143
|
-
const glamaBaseURL = "https://glama.ai/api/gateway/openai/v1";
|
|
144
|
-
return (0, import_openai.createOpenAI)({
|
|
217
|
+
const glamaBaseURL = effectiveBaseURL || "https://glama.ai/api/gateway/openai/v1";
|
|
218
|
+
return (0, import_openai.createOpenAI)({
|
|
219
|
+
apiKey: apiKey ?? "",
|
|
220
|
+
baseURL: glamaBaseURL,
|
|
221
|
+
...runtimeHeaders ? { headers: runtimeHeaders } : {},
|
|
222
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
223
|
+
}).chat(model);
|
|
145
224
|
}
|
|
146
225
|
case "dexto-nova": {
|
|
147
226
|
const dextoBaseURL = resolveDextoGatewayBaseURL(baseURL);
|
|
148
227
|
const headers = {
|
|
228
|
+
...runtimeHeaders ?? {},
|
|
149
229
|
[DEXTO_GATEWAY_HEADERS.CLIENT_SOURCE]: context?.clientSource ?? "cli"
|
|
150
230
|
};
|
|
151
231
|
if (context?.sessionId) {
|
|
@@ -154,14 +234,13 @@ function createVercelModel(llmConfig, context) {
|
|
|
154
234
|
if (process.env.DEXTO_CLI_VERSION) {
|
|
155
235
|
headers[DEXTO_GATEWAY_HEADERS.CLIENT_VERSION] = process.env.DEXTO_CLI_VERSION;
|
|
156
236
|
}
|
|
157
|
-
const provider2 = (0,
|
|
158
|
-
|
|
237
|
+
const provider2 = (0, import_openai_compatible.createOpenAICompatible)({
|
|
238
|
+
name: "dexto-nova",
|
|
159
239
|
baseURL: dextoBaseURL,
|
|
160
240
|
headers,
|
|
161
|
-
|
|
162
|
-
compatibility: "strict"
|
|
241
|
+
...apiKey?.trim() ? { apiKey } : {}
|
|
163
242
|
});
|
|
164
|
-
const chatModel = provider2.
|
|
243
|
+
const chatModel = provider2.chatModel(model);
|
|
165
244
|
if (!isLanguageModel(chatModel)) {
|
|
166
245
|
throw import_errors.LLMError.generationFailed(
|
|
167
246
|
"Dexto gateway provider returned an invalid language model instance",
|
|
@@ -181,7 +260,7 @@ function createVercelModel(llmConfig, context) {
|
|
|
181
260
|
}
|
|
182
261
|
const location = process.env.GOOGLE_VERTEX_LOCATION;
|
|
183
262
|
if (model.includes("claude")) {
|
|
184
|
-
const headers = (0,
|
|
263
|
+
const headers = (0, import_llm.supportsAnthropicInterleavedThinking)(model) ? { [import_llm.ANTHROPIC_BETA_HEADER]: import_llm.ANTHROPIC_INTERLEAVED_THINKING_BETA } : void 0;
|
|
185
264
|
return (0, import_anthropic2.createVertexAnthropic)({
|
|
186
265
|
project: projectId,
|
|
187
266
|
location: location || "us-east5",
|
|
@@ -210,10 +289,15 @@ function createVercelModel(llmConfig, context) {
|
|
|
210
289
|
return (0, import_amazon_bedrock.createAmazonBedrock)({ region })(modelId);
|
|
211
290
|
}
|
|
212
291
|
case "anthropic": {
|
|
213
|
-
const headers = (
|
|
292
|
+
const headers = mergeHeaders(
|
|
293
|
+
(0, import_llm.supportsAnthropicInterleavedThinking)(model) ? { [import_llm.ANTHROPIC_BETA_HEADER]: import_llm.ANTHROPIC_INTERLEAVED_THINKING_BETA } : void 0,
|
|
294
|
+
runtimeHeaders
|
|
295
|
+
);
|
|
214
296
|
return (0, import_anthropic.createAnthropic)({
|
|
215
297
|
apiKey: apiKey ?? "",
|
|
216
|
-
...
|
|
298
|
+
...effectiveBaseURL ? { baseURL: effectiveBaseURL } : {},
|
|
299
|
+
...headers ? { headers } : {},
|
|
300
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
217
301
|
})(model);
|
|
218
302
|
}
|
|
219
303
|
case "google":
|
|
@@ -225,8 +309,13 @@ function createVercelModel(llmConfig, context) {
|
|
|
225
309
|
case "cohere":
|
|
226
310
|
return (0, import_cohere.createCohere)({ apiKey: apiKey ?? "" })(model);
|
|
227
311
|
case "ollama": {
|
|
228
|
-
const ollamaBaseURL =
|
|
229
|
-
return (0, import_openai.createOpenAI)({
|
|
312
|
+
const ollamaBaseURL = effectiveBaseURL || "http://localhost:11434/v1";
|
|
313
|
+
return (0, import_openai.createOpenAI)({
|
|
314
|
+
apiKey: apiKey ?? "ollama",
|
|
315
|
+
baseURL: ollamaBaseURL,
|
|
316
|
+
...runtimeHeaders ? { headers: runtimeHeaders } : {},
|
|
317
|
+
...runtimeFetch ? { fetch: runtimeFetch } : {}
|
|
318
|
+
}).chat(model);
|
|
230
319
|
}
|
|
231
320
|
case "local": {
|
|
232
321
|
return (0, import_ai_sdk_adapter.createLocalLanguageModel)({
|
|
@@ -242,6 +331,8 @@ function createLLMService(config, toolManager, systemPromptManager, conversation
|
|
|
242
331
|
const providerContext = {
|
|
243
332
|
sessionId,
|
|
244
333
|
...options.cwd !== void 0 ? { cwd: options.cwd } : {},
|
|
334
|
+
authResolver: options.authResolver ?? null,
|
|
335
|
+
logger,
|
|
245
336
|
onCodexRateLimitStatus: (snapshot) => {
|
|
246
337
|
sessionEventBus.emit("llm:rate-limit-status", {
|
|
247
338
|
provider: config.provider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EACR,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EACR,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,YAAY,CAAC;AAqHpB;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,aAAa,CAsSf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,0BAA0B,EAAE,eAAe,EACnE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,uBAAuB,EAChC,oBAAoB,CAAC,EAAE,oBAAoB,GAC5C,gBAAgB,CAuClB"}
|