@easynet/agent-model 1.0.67 → 1.0.68
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/api/create-agent-model-registry.d.ts +19 -0
- package/dist/api/create-agent-model-registry.d.ts.map +1 -0
- package/dist/{chunk-CCGNXMFC.js → chunk-6EQCGQTV.js} +4 -15
- package/dist/chunk-6EQCGQTV.js.map +1 -0
- package/dist/{chunk-EPVJLBGC.js → chunk-AUQEXHUP.js} +2 -15
- package/dist/chunk-AUQEXHUP.js.map +1 -0
- package/dist/{chunk-K3JR2N4E.js → chunk-KE7IMUSA.js} +2 -29
- package/dist/chunk-KE7IMUSA.js.map +1 -0
- package/dist/chunk-MFLWZSWI.js +17 -0
- package/dist/chunk-MFLWZSWI.js.map +1 -0
- package/dist/{chunk-XSR4TAZ7.js → chunk-RRZDREGU.js} +9 -9
- package/dist/cli/index.js +252 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.js +44 -7
- package/dist/config/index.js.map +1 -1
- package/dist/connectivity/index.js +1 -2
- package/dist/extensions/index.js +5 -7
- package/dist/index.d.ts +3 -57
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +191 -109
- package/dist/index.js.map +1 -1
- package/dist/langchain/index.js +2 -3
- package/dist/model/index.js +172 -5
- package/dist/model/index.js.map +1 -1
- package/dist/npm/index.js +1 -2
- package/dist/registry/index.js +0 -2
- package/package.json +1 -33
- package/dist/chunk-5QOKZ2JF.js +0 -83
- package/dist/chunk-5QOKZ2JF.js.map +0 -1
- package/dist/chunk-CCGNXMFC.js.map +0 -1
- package/dist/chunk-CJK5NAOX.js +0 -260
- package/dist/chunk-CJK5NAOX.js.map +0 -1
- package/dist/chunk-EPVJLBGC.js.map +0 -1
- package/dist/chunk-HCU4AWIV.js +0 -19
- package/dist/chunk-HCU4AWIV.js.map +0 -1
- package/dist/chunk-K3JR2N4E.js.map +0 -1
- package/dist/chunk-PZ5AY32C.js +0 -10
- package/dist/chunk-PZ5AY32C.js.map +0 -1
- package/dist/chunk-V5QTINFH.js +0 -43
- package/dist/chunk-V5QTINFH.js.map +0 -1
- package/dist/chunk-Z4E7LN4P.js +0 -205
- package/dist/chunk-Z4E7LN4P.js.map +0 -1
- /package/dist/{chunk-XSR4TAZ7.js.map → chunk-RRZDREGU.js.map} +0 -0
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/config/index.ts","../../src/config/yaml.ts","../../src/config/ref.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { deepMerge } from \"@easynet/agent-common\";\nimport { loadModelConfig, type LoadLlmConfigOptions, type ModelConfigResult } from \"./loader.js\";\n\nexport { parseLlmSection } from \"./parser.js\";\nexport { loadLlmConfig, parseLlmYaml, substituteEnv } from \"./loader.js\";\nexport { loadYamlConfig } from \"./yaml.js\";\nexport { normalizeAgentModelConfigRef } from \"./ref.js\";\nexport {\n loadYamlFile,\n loadYamlFileSync,\n parseYamlContent,\n clearYamlFileCache,\n type LoadYamlOptions,\n type YamlEnvOptions,\n} from \"./yaml-utils.js\";\nexport type { LoadLlmConfigOptions, ModelConfigResult } from \"./loader.js\";\nexport type { AgentModelConfigRef } from \"./ref.js\";\n\nexport interface LoadModelConfigOptions {\n configPath?: string;\n loadOptions?: LoadLlmConfigOptions;\n}\n\nexport interface CreateModelConfigOptions extends LoadModelConfigOptions {\n overrides?: Partial<ModelConfigResult>;\n}\n\nexport function loadModelRuntimeConfig(options: LoadModelConfigOptions = {}): ModelConfigResult | null {\n const configPath = options.configPath ?? join(process.cwd(), \"model.yaml\");\n return loadModelConfig(configPath, options.loadOptions);\n}\n\nexport function createModelConfig(options: CreateModelConfigOptions = {}): ModelConfigResult | null {\n const base = loadModelRuntimeConfig(options);\n if (!base) return base;\n if (!options.overrides) return base;\n return deepMerge({} as ModelConfigResult, base, options.overrides);\n}\n","/**\n * Generic YAML file loader utility.\n */\n\nimport { loadYamlFileSync } from \"./yaml-utils.js\";\n\n/**\n * Load and parse a YAML file into a typed object.\n * Returns empty object if file doesn't exist.\n */\nexport function loadYamlConfig<T = Record<string, unknown>>(filePath: string): T {\n try {\n const parsed = loadYamlFileSync<T>(filePath, {\n substituteEnv: true,\n missingEnv: \"keep\",\n cache: true,\n });\n return (parsed ?? ({} as T)) as T;\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to load YAML config from ${filePath}: ${msg}`, { cause: e });\n }\n}\n","/** Agent-level reference to models config file. */\nexport interface AgentModelConfigRef {\n ref?: string;\n}\n\nfunction asObject(input: unknown): Record<string, unknown> | undefined {\n return typeof input === \"object\" && input !== null ? (input as Record<string, unknown>) : undefined;\n}\n\n/** Normalize unknown value to AgentModelConfigRef. */\nexport function normalizeAgentModelConfigRef(raw: unknown): Partial<AgentModelConfigRef> {\n if (typeof raw === \"string\" && raw.trim().length > 0) return { ref: raw.trim() };\n const obj = asObject(raw);\n if (!obj) return {};\n if (typeof obj.ref === \"string\" && obj.ref.trim().length > 0) return { ref: obj.ref.trim() };\n return {};\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,iBAAiB;;;ACSnB,SAAS,eAA4C,UAAqB;AAC/E,MAAI;AACF,UAAM,SAAS,iBAAoB,UAAU;AAAA,MAC3C,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,OAAO;AAAA,IACT,CAAC;AACD,WAAQ,UAAW,CAAC;AAAA,EACtB,SAAS,GAAG;AACV,UAAM,MAAM,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACrD,UAAM,IAAI,MAAM,mCAAmC,QAAQ,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;AAAA,EACrF;AACF;;;ACjBA,SAAS,SAAS,OAAqD;AACrE,SAAO,OAAO,UAAU,YAAY,UAAU,OAAQ,QAAoC;AAC5F;AAGO,SAAS,6BAA6B,KAA4C;AACvF,MAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,EAAE,SAAS,EAAG,QAAO,EAAE,KAAK,IAAI,KAAK,EAAE;AAC/E,QAAM,MAAM,SAAS,GAAG;AACxB,MAAI,CAAC,IAAK,QAAO,CAAC;AAClB,MAAI,OAAO,IAAI,QAAQ,YAAY,IAAI,IAAI,KAAK,EAAE,SAAS,EAAG,QAAO,EAAE,KAAK,IAAI,IAAI,KAAK,EAAE;AAC3F,SAAO,CAAC;AACV;;;AFYO,SAAS,uBAAuB,UAAkC,CAAC,GAA6B;AACrG,QAAM,aAAa,QAAQ,cAAc,KAAK,QAAQ,IAAI,GAAG,YAAY;AACzE,SAAO,gBAAgB,YAAY,QAAQ,WAAW;AACxD;AAEO,SAAS,kBAAkB,UAAoC,CAAC,GAA6B;AAClG,QAAM,OAAO,uBAAuB,OAAO;AAC3C,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,CAAC,QAAQ,UAAW,QAAO;AAC/B,SAAO,UAAU,CAAC,GAAwB,MAAM,QAAQ,SAAS;AACnE;","names":[]}
|
package/dist/extensions/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "../chunk-V5QTINFH.js";
|
|
2
1
|
import {
|
|
3
2
|
createChatModelWithNpm,
|
|
4
3
|
discoverLLMExtensions,
|
|
@@ -10,16 +9,15 @@ import {
|
|
|
10
9
|
resolveLLMExtensionPackages,
|
|
11
10
|
resolveLlmSectionWithNpm,
|
|
12
11
|
resolveNpmProvider
|
|
13
|
-
} from "../chunk-
|
|
12
|
+
} from "../chunk-RRZDREGU.js";
|
|
13
|
+
import "../chunk-6EQCGQTV.js";
|
|
14
|
+
import "../chunk-G7MKWPEI.js";
|
|
15
|
+
import "../chunk-SPDXNDDD.js";
|
|
14
16
|
import {
|
|
15
17
|
NPM_PROTOCOL_PREFIX,
|
|
16
18
|
isNpmProviderSpec,
|
|
17
19
|
parseNpmProviderSpec
|
|
18
|
-
} from "../chunk-
|
|
19
|
-
import "../chunk-CCGNXMFC.js";
|
|
20
|
-
import "../chunk-SPDXNDDD.js";
|
|
21
|
-
import "../chunk-G7MKWPEI.js";
|
|
22
|
-
import "../chunk-PZ5AY32C.js";
|
|
20
|
+
} from "../chunk-KE7IMUSA.js";
|
|
23
21
|
export {
|
|
24
22
|
NPM_PROTOCOL_PREFIX,
|
|
25
23
|
createChatModelWithNpm,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,61 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Minimal public API for @easynet/agent-model.
|
|
3
|
-
*
|
|
3
|
+
* Only support creating AgentModel via embedded model.yaml (+ optional override file).
|
|
4
4
|
*/
|
|
5
|
-
export {
|
|
6
|
-
export type {
|
|
7
|
-
export { getDefaultLlmConfig } from "./api/get-default-llm-config.js";
|
|
8
|
-
export type { GetDefaultLlmConfigOptions } from "./api/get-default-llm-config.js";
|
|
9
|
-
export { getDefaultVlmConfig } from "./api/get-default-vlm-config.js";
|
|
10
|
-
export type { GetDefaultVlmConfigOptions } from "./api/get-default-vlm-config.js";
|
|
11
|
-
export { createEmbedFnFromModelsConfig } from "./api/create-embed-fn.js";
|
|
12
|
-
export type { EmbedFn } from "./api/create-embed-fn.js";
|
|
13
|
-
export type { AgentModelConfigRef } from "./config/index.js";
|
|
14
|
-
export { normalizeAgentModelConfigRef, loadModelRuntimeConfig, createModelConfig, } from "./config/index.js";
|
|
15
|
-
export type { LoadModelConfigOptions, CreateModelConfigOptions } from "./config/index.js";
|
|
16
|
-
export { createChatModelFromLlmConfig } from "./langchain/index.js";
|
|
17
|
-
export type { CreateChatModelOptions } from "./langchain/index.js";
|
|
18
|
-
export { applyToolChoiceAuto } from "./langchain/index.js";
|
|
19
|
-
export { registerChatModelProvider, getChatModelFactory } from "./registry/chat-model.js";
|
|
20
|
-
export type { ChatModelFactory } from "./registry/chat-model.js";
|
|
21
|
-
import { createAgentLlm } from "./api/create-agent-llm.js";
|
|
22
|
-
import { getDefaultLlmConfig } from "./api/get-default-llm-config.js";
|
|
23
|
-
import { getDefaultVlmConfig } from "./api/get-default-vlm-config.js";
|
|
24
|
-
import { createEmbedFnFromModelsConfig } from "./api/create-embed-fn.js";
|
|
25
|
-
import { createChatModelFromLlmConfig, applyToolChoiceAuto } from "./langchain/index.js";
|
|
26
|
-
import { registerChatModelProvider, getChatModelFactory } from "./registry/chat-model.js";
|
|
27
|
-
import * as ConfigApi from "./config/index.js";
|
|
28
|
-
import * as LangChainApi from "./langchain/index.js";
|
|
29
|
-
import * as ModelApi from "./model/index.js";
|
|
30
|
-
import * as RegistryApi from "./registry/index.js";
|
|
31
|
-
import * as ExtensionsApi from "./extensions/index.js";
|
|
32
|
-
import * as ConnectivityApi from "./connectivity/index.js";
|
|
33
|
-
import * as NpmApi from "./npm/index.js";
|
|
34
|
-
import * as CliApi from "./cli/index.js";
|
|
35
|
-
/**
|
|
36
|
-
* Facade: high-frequency model APIs with a single import.
|
|
37
|
-
*/
|
|
38
|
-
export declare const modelApi: {
|
|
39
|
-
readonly createAgentLlm: typeof createAgentLlm;
|
|
40
|
-
readonly getDefaultLlmConfig: typeof getDefaultLlmConfig;
|
|
41
|
-
readonly getDefaultVlmConfig: typeof getDefaultVlmConfig;
|
|
42
|
-
readonly createEmbedFnFromModelsConfig: typeof createEmbedFnFromModelsConfig;
|
|
43
|
-
readonly createChatModelFromLlmConfig: typeof createChatModelFromLlmConfig;
|
|
44
|
-
readonly applyToolChoiceAuto: typeof applyToolChoiceAuto;
|
|
45
|
-
readonly registerChatModelProvider: typeof registerChatModelProvider;
|
|
46
|
-
readonly getChatModelFactory: typeof getChatModelFactory;
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* Facade: grouped subpath modules (config/langchain/model/registry/extensions/connectivity/npm/cli).
|
|
50
|
-
*/
|
|
51
|
-
export declare const platformApi: {
|
|
52
|
-
readonly config: typeof ConfigApi;
|
|
53
|
-
readonly langchain: typeof LangChainApi;
|
|
54
|
-
readonly model: typeof ModelApi;
|
|
55
|
-
readonly registry: typeof RegistryApi;
|
|
56
|
-
readonly extensions: typeof ExtensionsApi;
|
|
57
|
-
readonly connectivity: typeof ConnectivityApi;
|
|
58
|
-
readonly npm: typeof NpmApi;
|
|
59
|
-
readonly cli: typeof CliApi;
|
|
60
|
-
};
|
|
5
|
+
export { createAgentModelRegistry } from "./api/create-agent-model-registry.js";
|
|
6
|
+
export type { CreateAgentModelRegistryOptions } from "./api/create-agent-model-registry.js";
|
|
61
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,YAAY,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,73 +1,128 @@
|
|
|
1
1
|
import {
|
|
2
|
-
cli_exports,
|
|
3
|
-
createAgentLlm
|
|
4
|
-
} from "./chunk-CJK5NAOX.js";
|
|
5
|
-
import {
|
|
6
|
-
config_exports,
|
|
7
|
-
createModelConfig,
|
|
8
|
-
loadModelRuntimeConfig,
|
|
9
|
-
normalizeAgentModelConfigRef
|
|
10
|
-
} from "./chunk-5QOKZ2JF.js";
|
|
11
|
-
import {
|
|
12
|
-
loadLlmConfig,
|
|
13
2
|
loadModelConfig
|
|
14
3
|
} from "./chunk-3HA2CHZN.js";
|
|
15
4
|
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
extensions_exports
|
|
20
|
-
} from "./chunk-V5QTINFH.js";
|
|
5
|
+
buildUnreachableError,
|
|
6
|
+
checkEndpointConnectivity
|
|
7
|
+
} from "./chunk-AUQEXHUP.js";
|
|
21
8
|
import {
|
|
22
9
|
resolveLlmSectionWithNpm
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import {
|
|
25
|
-
npm_exports
|
|
26
|
-
} from "./chunk-K3JR2N4E.js";
|
|
10
|
+
} from "./chunk-RRZDREGU.js";
|
|
27
11
|
import {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
} from "./chunk-CCGNXMFC.js";
|
|
12
|
+
createChatModelFromLlmConfig
|
|
13
|
+
} from "./chunk-6EQCGQTV.js";
|
|
14
|
+
import "./chunk-G7MKWPEI.js";
|
|
32
15
|
import {
|
|
33
|
-
createModelHub,
|
|
34
|
-
model_exports,
|
|
35
16
|
parseEmbedSection
|
|
36
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-MFLWZSWI.js";
|
|
37
18
|
import {
|
|
38
19
|
parseLlmSection
|
|
39
20
|
} from "./chunk-SPDXNDDD.js";
|
|
40
|
-
import
|
|
41
|
-
registry_exports
|
|
42
|
-
} from "./chunk-HCU4AWIV.js";
|
|
43
|
-
import {
|
|
44
|
-
getChatModelFactory,
|
|
45
|
-
registerChatModelProvider
|
|
46
|
-
} from "./chunk-G7MKWPEI.js";
|
|
47
|
-
import "./chunk-PZ5AY32C.js";
|
|
21
|
+
import "./chunk-KE7IMUSA.js";
|
|
48
22
|
|
|
49
|
-
// src/api/
|
|
50
|
-
import {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
23
|
+
// src/api/create-agent-model-registry.ts
|
|
24
|
+
import { existsSync } from "fs";
|
|
25
|
+
import { dirname, resolve } from "path";
|
|
26
|
+
import { fileURLToPath } from "url";
|
|
27
|
+
import { OpenAIEmbeddings } from "@langchain/openai";
|
|
28
|
+
import { deepMerge } from "@easynet/agent-common";
|
|
29
|
+
function resolveEmbeddedConfigPath() {
|
|
30
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
31
|
+
const candidates = [
|
|
32
|
+
resolve(moduleDir, "../../config/model.yaml"),
|
|
33
|
+
resolve(moduleDir, "../../model.yaml")
|
|
34
|
+
];
|
|
35
|
+
const found = candidates.find((candidate) => existsSync(candidate));
|
|
36
|
+
if (found) return found;
|
|
37
|
+
throw new Error(`createAgentModelRegistry failed: embedded model.yaml not found. Tried: ${candidates.join(", ")}`);
|
|
62
38
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
39
|
+
function normalizeOptions(configPathOrOptions) {
|
|
40
|
+
if (configPathOrOptions == null) return {};
|
|
41
|
+
if (typeof configPathOrOptions === "string") return { configPath: configPathOrOptions };
|
|
42
|
+
return configPathOrOptions;
|
|
43
|
+
}
|
|
44
|
+
function ensureConfig(path) {
|
|
45
|
+
const loaded = loadModelConfig(path);
|
|
46
|
+
if (!loaded) {
|
|
47
|
+
throw new Error(`createAgentModelRegistry failed: config file not found: ${path}`);
|
|
48
|
+
}
|
|
49
|
+
return loaded;
|
|
50
|
+
}
|
|
51
|
+
function applyDefaultToolChoice(model) {
|
|
52
|
+
const m = model;
|
|
53
|
+
const orig = m.bindTools?.bind(model);
|
|
54
|
+
if (!orig) return;
|
|
55
|
+
m.bindTools = function(tools, opts) {
|
|
56
|
+
return orig(tools, { ...opts, tool_choice: "auto" });
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
var CIS_DEFAULT_RESOLVE_HOST = "s0010-ml-https.s0010.us-west-2.awswd";
|
|
60
|
+
var CIS_DEFAULT_RESOLVE_IP = "10.210.98.124";
|
|
61
|
+
function buildEndpointConnectivityOptions(config) {
|
|
62
|
+
const opts = config.options ?? config;
|
|
63
|
+
const provider = typeof config.provider === "string" ? config.provider : "";
|
|
64
|
+
const baseURL = config.baseURL;
|
|
65
|
+
const isCis = provider === "cis" || provider.includes("cis");
|
|
66
|
+
const useCisDefault = isCis && baseURL.includes(CIS_DEFAULT_RESOLVE_HOST) && opts?.resolveHost == null;
|
|
67
|
+
const resolveHost = opts?.resolveHost != null && typeof opts.resolveHost.from === "string" ? opts.resolveHost : useCisDefault ? { from: CIS_DEFAULT_RESOLVE_HOST, to: CIS_DEFAULT_RESOLVE_IP } : void 0;
|
|
68
|
+
const host = typeof opts?.host === "string" ? opts.host : resolveHost ? resolveHost.from : void 0;
|
|
69
|
+
if (resolveHost == null && host == null) return void 0;
|
|
70
|
+
const verifySSL = opts?.verifySSL === true;
|
|
71
|
+
const bypassAuth = opts?.bypassAuth !== false;
|
|
72
|
+
return {
|
|
73
|
+
resolveHost,
|
|
74
|
+
host,
|
|
75
|
+
verifySSL: resolveHost != null ? false : verifySSL ? true : void 0,
|
|
76
|
+
bypassAuth: bypassAuth ? true : void 0,
|
|
77
|
+
featureKey: typeof opts?.featureKey === "string" ? opts.featureKey : void 0
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async function ensureConnectivity(resolvedLlmSection, options) {
|
|
81
|
+
let configs;
|
|
82
|
+
try {
|
|
83
|
+
const parsed = parseLlmSection(resolvedLlmSection ?? null);
|
|
84
|
+
configs = parsed.configs.filter(
|
|
85
|
+
(c) => typeof c.baseURL === "string" && c.baseURL.length > 0 && (c.baseURL.startsWith("http://") || c.baseURL.startsWith("https://")) && !c.baseURL.includes("${")
|
|
86
|
+
);
|
|
87
|
+
} catch {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (options.checkConnectivity === false || configs.length === 0) return;
|
|
91
|
+
const report = (status) => options.onConnectionStatus?.(status);
|
|
92
|
+
const timeoutMs = options.connectivityTimeoutMs ?? 8e3;
|
|
93
|
+
for (const config of configs) {
|
|
94
|
+
const { id, baseURL } = config;
|
|
95
|
+
report({
|
|
96
|
+
phase: "checking",
|
|
97
|
+
endpointId: id,
|
|
98
|
+
baseURL,
|
|
99
|
+
message: "Checking connection..."
|
|
100
|
+
});
|
|
101
|
+
const endpointOpts = buildEndpointConnectivityOptions(config);
|
|
102
|
+
const result = await checkEndpointConnectivity(baseURL, {
|
|
103
|
+
timeoutMs,
|
|
104
|
+
...endpointOpts
|
|
105
|
+
});
|
|
106
|
+
if (result.reachable) {
|
|
107
|
+
report({
|
|
108
|
+
phase: "reachable",
|
|
109
|
+
endpointId: id,
|
|
110
|
+
baseURL,
|
|
111
|
+
message: result.message ?? "Connected"
|
|
112
|
+
});
|
|
113
|
+
} else {
|
|
114
|
+
report({
|
|
115
|
+
phase: "unreachable",
|
|
116
|
+
endpointId: id,
|
|
117
|
+
baseURL,
|
|
118
|
+
message: result.message ?? "Unreachable"
|
|
119
|
+
});
|
|
120
|
+
throw new Error(buildUnreachableError(id, baseURL, result.message));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function resolveDefaultVlmConfig(merged, options = {}) {
|
|
125
|
+
const sourceSection = merged.vlm ?? merged.llm;
|
|
71
126
|
if (sourceSection == null) return null;
|
|
72
127
|
const resolved = await resolveLlmSectionWithNpm(sourceSection, {
|
|
73
128
|
installNpmIfMissing: options.installNpmIfMissing !== false,
|
|
@@ -76,64 +131,91 @@ async function getDefaultVlmConfig(options = {}) {
|
|
|
76
131
|
const { defaultId, configs } = parseLlmSection(resolved);
|
|
77
132
|
const imageConfigs = configs.filter((c) => c.type === "image");
|
|
78
133
|
if (imageConfigs.length === 0) return null;
|
|
79
|
-
const
|
|
80
|
-
return
|
|
134
|
+
const targetId = options.modelId ?? defaultId;
|
|
135
|
+
return imageConfigs.find((c) => c.id === targetId) ?? imageConfigs[0] ?? null;
|
|
81
136
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (!config?.embed) return void 0;
|
|
87
|
-
const parsed = parseEmbedSection(config.embed);
|
|
88
|
-
if (parsed.configs.length === 0) return void 0;
|
|
137
|
+
function resolveEmbedConfig(merged, embedId) {
|
|
138
|
+
if (!merged.embed) return null;
|
|
139
|
+
const parsed = parseEmbedSection(merged.embed);
|
|
140
|
+
if (parsed.configs.length === 0) return null;
|
|
89
141
|
const id = embedId ?? parsed.defaultId;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
142
|
+
return parsed.configs.find((c) => c.id === id) ?? parsed.configs[0] ?? null;
|
|
143
|
+
}
|
|
144
|
+
function createLangChainEmbeddingModelFromConfig(config) {
|
|
145
|
+
const opts = config.options ?? {};
|
|
146
|
+
const baseURLRaw = typeof config.baseURL === "string" ? config.baseURL : void 0;
|
|
147
|
+
const baseURL = typeof baseURLRaw === "string" && baseURLRaw.length > 0 ? baseURLRaw.replace(/\/$/, "").endsWith("/v1") ? baseURLRaw : `${baseURLRaw.replace(/\/$/, "")}/v1` : void 0;
|
|
148
|
+
const apiKey = typeof config.apiKey === "string" && config.apiKey.length > 0 ? config.apiKey : "not-needed";
|
|
149
|
+
const timeout = typeof opts.timeoutMs === "number" ? opts.timeoutMs : void 0;
|
|
150
|
+
const dimensions = typeof opts.dimensions === "number" ? opts.dimensions : void 0;
|
|
151
|
+
return new OpenAIEmbeddings({
|
|
152
|
+
model: typeof config.model === "string" && config.model.length > 0 ? config.model : "text-embedding-3-small",
|
|
153
|
+
...dimensions != null ? { dimensions } : {},
|
|
154
|
+
...timeout != null ? { timeout } : {},
|
|
155
|
+
apiKey,
|
|
156
|
+
...baseURL ? { configuration: { baseURL } } : {}
|
|
96
157
|
});
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
158
|
+
}
|
|
159
|
+
async function createAgentModelRegistry(configPathOrOptions) {
|
|
160
|
+
const options = normalizeOptions(configPathOrOptions);
|
|
161
|
+
const embeddedConfigPath = resolveEmbeddedConfigPath();
|
|
162
|
+
const base = ensureConfig(embeddedConfigPath);
|
|
163
|
+
const override = options.configPath ? ensureConfig(resolve(process.cwd(), options.configPath)) : void 0;
|
|
164
|
+
const merged = override ? deepMerge({}, base, override) : base;
|
|
165
|
+
const resolveChatArgs = (idOrOptions, maybeOptions) => {
|
|
166
|
+
if (typeof idOrOptions === "string") return { id: idOrOptions, options: maybeOptions ?? {} };
|
|
167
|
+
return { id: void 0, options: idOrOptions ?? {} };
|
|
168
|
+
};
|
|
169
|
+
return {
|
|
170
|
+
async getChatModel(idOrOptions, maybeOptions) {
|
|
171
|
+
const { id, options: chatOptions } = resolveChatArgs(idOrOptions, maybeOptions);
|
|
172
|
+
if (merged.llm == null) {
|
|
173
|
+
throw new Error("createAgentModelRegistry failed: no llm section configured");
|
|
174
|
+
}
|
|
175
|
+
const resolvedSection = await resolveLlmSectionWithNpm(merged.llm, {
|
|
176
|
+
installNpmIfMissing: chatOptions.installNpmIfMissing !== false,
|
|
177
|
+
cwd: process.cwd()
|
|
178
|
+
});
|
|
179
|
+
const parsed = parseLlmSection(resolvedSection);
|
|
180
|
+
const chosenId = id ?? parsed.defaultId;
|
|
181
|
+
const config = parsed.configs.find((c) => c.id === chosenId) ?? parsed.configs[0];
|
|
182
|
+
if (!config) throw new Error("createAgentModelRegistry failed: no chat model configured");
|
|
183
|
+
const llmSection = { default: config.id, [config.id]: config };
|
|
184
|
+
const checkConnectivity = chatOptions.checkConnectivity ?? merged.runtime.check_connectivity;
|
|
185
|
+
await ensureConnectivity(llmSection, { ...chatOptions, checkConnectivity });
|
|
186
|
+
const model = createChatModelFromLlmConfig({ llmSection });
|
|
187
|
+
applyDefaultToolChoice(model);
|
|
188
|
+
return model;
|
|
189
|
+
},
|
|
190
|
+
getEmbeddingModel(embedId) {
|
|
191
|
+
const embedConfig = resolveEmbedConfig(merged, embedId);
|
|
192
|
+
if (!embedConfig) {
|
|
193
|
+
throw new Error("createAgentModelRegistry failed: no embed model configured");
|
|
194
|
+
}
|
|
195
|
+
return createLangChainEmbeddingModelFromConfig(embedConfig);
|
|
196
|
+
},
|
|
197
|
+
async getVlmChatModel(idOrOptions, maybeOptions) {
|
|
198
|
+
const { id, options: chatOptions } = resolveChatArgs(idOrOptions, maybeOptions);
|
|
199
|
+
const vlmConfig = await resolveDefaultVlmConfig(merged, {
|
|
200
|
+
installNpmIfMissing: chatOptions.installNpmIfMissing,
|
|
201
|
+
modelId: id
|
|
202
|
+
});
|
|
203
|
+
if (!vlmConfig) {
|
|
204
|
+
throw new Error("createAgentModelRegistry failed: no vlm/image model configured");
|
|
205
|
+
}
|
|
206
|
+
const section = {
|
|
207
|
+
default: vlmConfig.id,
|
|
208
|
+
[vlmConfig.id]: vlmConfig
|
|
209
|
+
};
|
|
210
|
+
const checkConnectivity = chatOptions.checkConnectivity ?? merged.runtime.check_connectivity;
|
|
211
|
+
await ensureConnectivity(section, { ...chatOptions, checkConnectivity });
|
|
212
|
+
const model = createChatModelFromLlmConfig({ llmSection: section });
|
|
213
|
+
applyDefaultToolChoice(model);
|
|
214
|
+
return model;
|
|
215
|
+
}
|
|
100
216
|
};
|
|
101
217
|
}
|
|
102
|
-
|
|
103
|
-
// src/index.ts
|
|
104
|
-
var modelApi = {
|
|
105
|
-
createAgentLlm,
|
|
106
|
-
getDefaultLlmConfig,
|
|
107
|
-
getDefaultVlmConfig,
|
|
108
|
-
createEmbedFnFromModelsConfig,
|
|
109
|
-
createChatModelFromLlmConfig,
|
|
110
|
-
applyToolChoiceAuto,
|
|
111
|
-
registerChatModelProvider,
|
|
112
|
-
getChatModelFactory
|
|
113
|
-
};
|
|
114
|
-
var platformApi = {
|
|
115
|
-
config: config_exports,
|
|
116
|
-
langchain: langchain_exports,
|
|
117
|
-
model: model_exports,
|
|
118
|
-
registry: registry_exports,
|
|
119
|
-
extensions: extensions_exports,
|
|
120
|
-
connectivity: connectivity_exports,
|
|
121
|
-
npm: npm_exports,
|
|
122
|
-
cli: cli_exports
|
|
123
|
-
};
|
|
124
218
|
export {
|
|
125
|
-
|
|
126
|
-
createAgentLlm,
|
|
127
|
-
createChatModelFromLlmConfig,
|
|
128
|
-
createEmbedFnFromModelsConfig,
|
|
129
|
-
createModelConfig,
|
|
130
|
-
getChatModelFactory,
|
|
131
|
-
getDefaultLlmConfig,
|
|
132
|
-
getDefaultVlmConfig,
|
|
133
|
-
loadModelRuntimeConfig,
|
|
134
|
-
modelApi,
|
|
135
|
-
normalizeAgentModelConfigRef,
|
|
136
|
-
platformApi,
|
|
137
|
-
registerChatModelProvider
|
|
219
|
+
createAgentModelRegistry
|
|
138
220
|
};
|
|
139
221
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/get-default-llm-config.ts","../src/api/get-default-vlm-config.ts","../src/api/create-embed-fn.ts","../src/index.ts"],"sourcesContent":["/**\n * Load model.yaml, resolve npm providers, and return the default LLMConfig.\n * For use by CLIs (e.g. wallee-llm) that need config without creating a model.\n */\n\nimport { join } from \"node:path\";\nimport { loadLlmConfig } from \"../config/loader.js\";\nimport { parseLlmSection } from \"../config/parser.js\";\nimport { resolveLlmSectionWithNpm } from \"../extensions/npm-protocol.js\";\nimport type { LLMConfig } from \"../types.js\";\n\nexport interface GetDefaultLlmConfigOptions {\n /** Path to model.yaml. Default: process.cwd() + \"/model.yaml\" */\n configPath?: string;\n /** Install npm provider packages if missing. Default true. */\n installNpmIfMissing?: boolean;\n}\n\n/**\n * Returns the default LLM config from model.yaml (after resolving npm: providers), or null if no config file.\n */\nexport async function getDefaultLlmConfig(\n options: GetDefaultLlmConfigOptions = {}\n): Promise<LLMConfig | null> {\n const configPath = options.configPath ?? join(process.cwd(), \"model.yaml\");\n const llmSection = loadLlmConfig(configPath);\n if (llmSection == null) return null;\n\n const resolved = await resolveLlmSectionWithNpm(llmSection, {\n installNpmIfMissing: options.installNpmIfMissing !== false,\n cwd: process.cwd(),\n });\n\n const { defaultId, configs } = parseLlmSection(resolved);\n const defaultConfig = configs.find((c: LLMConfig) => c.id === defaultId) ?? configs[0] ?? null;\n return defaultConfig;\n}\n","/**\n * Load model.yaml, resolve npm providers, and return a default VLM (type=image) config.\n */\n\nimport { join } from \"node:path\";\nimport { loadModelConfig } from \"../config/loader.js\";\nimport { parseLlmSection } from \"../config/parser.js\";\nimport { resolveLlmSectionWithNpm } from \"../extensions/npm-protocol.js\";\nimport type { LLMConfig } from \"../types.js\";\n\nexport interface GetDefaultVlmConfigOptions {\n /** Path to model.yaml. Default: process.cwd() + \"/model.yaml\" */\n configPath?: string;\n /** Install npm provider packages if missing. Default true. */\n installNpmIfMissing?: boolean;\n}\n\n/**\n * Returns the default VLM config (type=image) from model.yaml, or null if not configured.\n */\nexport async function getDefaultVlmConfig(\n options: GetDefaultVlmConfigOptions = {},\n): Promise<LLMConfig | null> {\n const configPath = options.configPath ?? join(process.cwd(), \"model.yaml\");\n const modelConfig = loadModelConfig(configPath);\n if (modelConfig == null) return null;\n\n // Prefer top-level `vlm:`. Fallback to `llm:` section with type=image entries.\n const sourceSection = modelConfig.vlm ?? modelConfig.llm;\n if (sourceSection == null) return null;\n\n const resolved = await resolveLlmSectionWithNpm(sourceSection, {\n installNpmIfMissing: options.installNpmIfMissing !== false,\n cwd: process.cwd(),\n });\n\n const { defaultId, configs } = parseLlmSection(resolved);\n const imageConfigs = configs.filter((c: LLMConfig) => c.type === \"image\");\n if (imageConfigs.length === 0) return null;\n\n const defaultConfig =\n imageConfigs.find((c: LLMConfig) => c.id === defaultId) ??\n imageConfigs[0] ??\n null;\n return defaultConfig;\n}\n","/**\n * Create an EmbedFn from the embed section of model.yaml.\n */\nimport { createModelHub } from \"../model/hub.js\";\nimport { parseEmbedSection } from \"../model/embed-parser.js\";\nimport { loadModelConfig } from \"../config/loader.js\";\n\nexport type EmbedFn = (input: string | string[]) => Promise<number[][]>;\n\n/**\n * Load model.yaml and build an EmbedFn from the `embed:` section.\n * Returns undefined if no embed section is configured.\n *\n * @param configPath - Path to model.yaml\n * @param embedId - Which embed instance to use (defaults to the `default:` key)\n */\nexport function createEmbedFnFromModelsConfig(\n configPath: string,\n embedId?: string,\n): EmbedFn | undefined {\n const config = loadModelConfig(configPath);\n if (!config?.embed) return undefined;\n\n const parsed = parseEmbedSection(config.embed);\n if (parsed.configs.length === 0) return undefined;\n\n const id = embedId ?? parsed.defaultId;\n const embedConfig =\n parsed.configs.find((c) => c.id === id) ?? parsed.configs[0];\n if (!embedConfig) return undefined;\n\n const hub = createModelHub({\n embeddingBaseURL: embedConfig.baseURL,\n embeddingModel: embedConfig.model,\n embeddingApiKey: embedConfig.apiKey,\n });\n\n return async (input: string | string[]) => {\n const result = await hub.embed({ input });\n return result.vectors;\n };\n}\n","/**\n * Minimal public API for @easynet/agent-model.\n * Goal: create a chat model from `model.yaml` with the smallest possible surface.\n */\n\n// Main high-level APIs\nexport { createAgentLlm } from \"./api/create-agent-llm.js\";\nexport type { CreateAgentLlmOptions } from \"./api/create-agent-llm.js\";\nexport { getDefaultLlmConfig } from \"./api/get-default-llm-config.js\";\nexport type { GetDefaultLlmConfigOptions } from \"./api/get-default-llm-config.js\";\nexport { getDefaultVlmConfig } from \"./api/get-default-vlm-config.js\";\nexport type { GetDefaultVlmConfigOptions } from \"./api/get-default-vlm-config.js\";\nexport { createEmbedFnFromModelsConfig } from \"./api/create-embed-fn.js\";\nexport type { EmbedFn } from \"./api/create-embed-fn.js\";\nexport type { AgentModelConfigRef } from \"./config/index.js\";\nexport {\n normalizeAgentModelConfigRef,\n loadModelRuntimeConfig,\n createModelConfig,\n} from \"./config/index.js\";\nexport type { LoadModelConfigOptions, CreateModelConfigOptions } from \"./config/index.js\";\n\n// Common runtime helper (used by agent-runtime)\nexport { createChatModelFromLlmConfig } from \"./langchain/index.js\";\nexport type { CreateChatModelOptions } from \"./langchain/index.js\";\nexport { applyToolChoiceAuto } from \"./langchain/index.js\";\n\n// Provider extension registration\nexport { registerChatModelProvider, getChatModelFactory } from \"./registry/chat-model.js\";\nexport type { ChatModelFactory } from \"./registry/chat-model.js\";\n\nimport { createAgentLlm } from \"./api/create-agent-llm.js\";\nimport { getDefaultLlmConfig } from \"./api/get-default-llm-config.js\";\nimport { getDefaultVlmConfig } from \"./api/get-default-vlm-config.js\";\nimport { createEmbedFnFromModelsConfig } from \"./api/create-embed-fn.js\";\nimport { createChatModelFromLlmConfig, applyToolChoiceAuto } from \"./langchain/index.js\";\nimport { registerChatModelProvider, getChatModelFactory } from \"./registry/chat-model.js\";\nimport * as ConfigApi from \"./config/index.js\";\nimport * as LangChainApi from \"./langchain/index.js\";\nimport * as ModelApi from \"./model/index.js\";\nimport * as RegistryApi from \"./registry/index.js\";\nimport * as ExtensionsApi from \"./extensions/index.js\";\nimport * as ConnectivityApi from \"./connectivity/index.js\";\nimport * as NpmApi from \"./npm/index.js\";\nimport * as CliApi from \"./cli/index.js\";\n\n/**\n * Facade: high-frequency model APIs with a single import.\n */\nexport const modelApi = {\n createAgentLlm,\n getDefaultLlmConfig,\n getDefaultVlmConfig,\n createEmbedFnFromModelsConfig,\n createChatModelFromLlmConfig,\n applyToolChoiceAuto,\n registerChatModelProvider,\n getChatModelFactory,\n} as const;\n\n/**\n * Facade: grouped subpath modules (config/langchain/model/registry/extensions/connectivity/npm/cli).\n */\nexport const platformApi = {\n config: ConfigApi,\n langchain: LangChainApi,\n model: ModelApi,\n registry: RegistryApi,\n extensions: ExtensionsApi,\n connectivity: ConnectivityApi,\n npm: NpmApi,\n cli: CliApi,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,SAAS,YAAY;AAgBrB,eAAsB,oBACpB,UAAsC,CAAC,GACZ;AAC3B,QAAM,aAAa,QAAQ,cAAc,KAAK,QAAQ,IAAI,GAAG,YAAY;AACzE,QAAM,aAAa,cAAc,UAAU;AAC3C,MAAI,cAAc,KAAM,QAAO;AAE/B,QAAM,WAAW,MAAM,yBAAyB,YAAY;AAAA,IAC1D,qBAAqB,QAAQ,wBAAwB;AAAA,IACrD,KAAK,QAAQ,IAAI;AAAA,EACnB,CAAC;AAED,QAAM,EAAE,WAAW,QAAQ,IAAI,gBAAgB,QAAQ;AACvD,QAAM,gBAAgB,QAAQ,KAAK,CAAC,MAAiB,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,KAAK;AAC1F,SAAO;AACT;;;AChCA,SAAS,QAAAA,aAAY;AAgBrB,eAAsB,oBACpB,UAAsC,CAAC,GACZ;AAC3B,QAAM,aAAa,QAAQ,cAAcC,MAAK,QAAQ,IAAI,GAAG,YAAY;AACzE,QAAM,cAAc,gBAAgB,UAAU;AAC9C,MAAI,eAAe,KAAM,QAAO;AAGhC,QAAM,gBAAgB,YAAY,OAAO,YAAY;AACrD,MAAI,iBAAiB,KAAM,QAAO;AAElC,QAAM,WAAW,MAAM,yBAAyB,eAAe;AAAA,IAC7D,qBAAqB,QAAQ,wBAAwB;AAAA,IACrD,KAAK,QAAQ,IAAI;AAAA,EACnB,CAAC;AAED,QAAM,EAAE,WAAW,QAAQ,IAAI,gBAAgB,QAAQ;AACvD,QAAM,eAAe,QAAQ,OAAO,CAAC,MAAiB,EAAE,SAAS,OAAO;AACxE,MAAI,aAAa,WAAW,EAAG,QAAO;AAEtC,QAAM,gBACJ,aAAa,KAAK,CAAC,MAAiB,EAAE,OAAO,SAAS,KACtD,aAAa,CAAC,KACd;AACF,SAAO;AACT;;;AC7BO,SAAS,8BACd,YACA,SACqB;AACrB,QAAM,SAAS,gBAAgB,UAAU;AACzC,MAAI,CAAC,QAAQ,MAAO,QAAO;AAE3B,QAAM,SAAS,kBAAkB,OAAO,KAAK;AAC7C,MAAI,OAAO,QAAQ,WAAW,EAAG,QAAO;AAExC,QAAM,KAAK,WAAW,OAAO;AAC7B,QAAM,cACJ,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,QAAQ,CAAC;AAC7D,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,MAAM,eAAe;AAAA,IACzB,kBAAkB,YAAY;AAAA,IAC9B,gBAAgB,YAAY;AAAA,IAC5B,iBAAiB,YAAY;AAAA,EAC/B,CAAC;AAED,SAAO,OAAO,UAA6B;AACzC,UAAM,SAAS,MAAM,IAAI,MAAM,EAAE,MAAM,CAAC;AACxC,WAAO,OAAO;AAAA,EAChB;AACF;;;ACQO,IAAM,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,cAAc;AAAA,EACzB,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,KAAK;AAAA,EACL,KAAK;AACP;","names":["join","join"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/create-agent-model-registry.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport type { Embeddings } from \"@langchain/core/embeddings\";\nimport { OpenAIEmbeddings } from \"@langchain/openai\";\nimport { deepMerge } from \"@easynet/agent-common\";\nimport { loadModelConfig, type ModelConfigResult } from \"../config/loader.js\";\nimport { createChatModelFromLlmConfig } from \"../langchain/index.js\";\nimport { resolveLlmSectionWithNpm } from \"../extensions/npm-protocol.js\";\nimport {\n checkEndpointConnectivity,\n buildUnreachableError,\n type EndpointConnectivityOptions,\n type ConnectionStatus,\n} from \"../connectivity/index.js\";\nimport { parseLlmSection } from \"../model/llm-parser.js\";\nimport { parseEmbedSection } from \"../model/embed-parser.js\";\nimport type { LLMConfig } from \"../model/types.js\";\n\nexport interface CreateAgentModelRegistryOptions {\n configPath?: string;\n}\n\nexport interface CreateAgentModelChatOptions {\n installNpmIfMissing?: boolean;\n checkConnectivity?: boolean;\n onConnectionStatus?: (status: ConnectionStatus) => void;\n connectivityTimeoutMs?: number;\n}\n\nexport interface AgentModel {\n getChatModel(idOrOptions?: string | CreateAgentModelChatOptions, maybeOptions?: CreateAgentModelChatOptions): Promise<BaseChatModel>;\n getEmbeddingModel(id?: string): Embeddings;\n getVlmChatModel(idOrOptions?: string | CreateAgentModelChatOptions, maybeOptions?: CreateAgentModelChatOptions): Promise<BaseChatModel>;\n}\n\nfunction resolveEmbeddedConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/model.yaml\"),\n resolve(moduleDir, \"../../model.yaml\"),\n ];\n const found = candidates.find((candidate) => existsSync(candidate));\n if (found) return found;\n throw new Error(`createAgentModelRegistry failed: embedded model.yaml not found. Tried: ${candidates.join(\", \")}`);\n}\n\nfunction normalizeOptions(configPathOrOptions?: string | CreateAgentModelRegistryOptions): CreateAgentModelRegistryOptions {\n if (configPathOrOptions == null) return {};\n if (typeof configPathOrOptions === \"string\") return { configPath: configPathOrOptions };\n return configPathOrOptions;\n}\n\nfunction ensureConfig(path: string): ModelConfigResult {\n const loaded = loadModelConfig(path);\n if (!loaded) {\n throw new Error(`createAgentModelRegistry failed: config file not found: ${path}`);\n }\n return loaded;\n}\n\nfunction applyDefaultToolChoice(model: BaseChatModel): void {\n const m = model as {\n bindTools?: (tools: unknown, opts?: Record<string, unknown>) => unknown;\n };\n const orig = m.bindTools?.bind(model);\n if (!orig) return;\n m.bindTools = function (tools: unknown, opts?: Record<string, unknown>) {\n return orig(tools, { ...opts, tool_choice: \"auto\" });\n };\n}\n\nconst CIS_DEFAULT_RESOLVE_HOST = \"s0010-ml-https.s0010.us-west-2.awswd\";\nconst CIS_DEFAULT_RESOLVE_IP = \"10.210.98.124\";\n\nfunction buildEndpointConnectivityOptions(\n config: LLMConfig & { baseURL: string }\n): EndpointConnectivityOptions | undefined {\n const opts = (config.options as Record<string, unknown> | undefined) ?? config;\n const provider = typeof config.provider === \"string\" ? config.provider : \"\";\n const baseURL = config.baseURL;\n const isCis = provider === \"cis\" || provider.includes(\"cis\");\n const useCisDefault =\n isCis &&\n baseURL.includes(CIS_DEFAULT_RESOLVE_HOST) &&\n opts?.resolveHost == null;\n\n const resolveHost =\n opts?.resolveHost != null && typeof (opts.resolveHost as { from?: string; to?: string }).from === \"string\"\n ? (opts.resolveHost as { from: string; to: string })\n : useCisDefault\n ? { from: CIS_DEFAULT_RESOLVE_HOST, to: CIS_DEFAULT_RESOLVE_IP }\n : undefined;\n const host = typeof opts?.host === \"string\" ? opts.host : (resolveHost ? resolveHost.from : undefined);\n if (resolveHost == null && host == null) return undefined;\n\n const verifySSL = opts?.verifySSL === true;\n const bypassAuth = opts?.bypassAuth !== false;\n\n return {\n resolveHost,\n host,\n verifySSL: resolveHost != null ? false : (verifySSL ? true : undefined),\n bypassAuth: bypassAuth ? true : undefined,\n featureKey: typeof opts?.featureKey === \"string\" ? opts.featureKey : undefined,\n };\n}\n\nasync function ensureConnectivity(\n resolvedLlmSection: unknown,\n options: CreateAgentModelChatOptions\n): Promise<void> {\n let configs: Array<LLMConfig & { baseURL: string }>;\n try {\n const parsed = parseLlmSection(resolvedLlmSection ?? null);\n configs = parsed.configs.filter(\n (c: LLMConfig): c is LLMConfig & { baseURL: string } =>\n typeof c.baseURL === \"string\" &&\n c.baseURL.length > 0 &&\n (c.baseURL.startsWith(\"http://\") || c.baseURL.startsWith(\"https://\")) &&\n !c.baseURL.includes(\"${\")\n );\n } catch {\n return;\n }\n if (options.checkConnectivity === false || configs.length === 0) return;\n\n const report = (status: ConnectionStatus) => options.onConnectionStatus?.(status);\n const timeoutMs = options.connectivityTimeoutMs ?? 8000;\n\n for (const config of configs) {\n const { id, baseURL } = config;\n report({\n phase: \"checking\",\n endpointId: id,\n baseURL,\n message: \"Checking connection...\",\n });\n\n const endpointOpts = buildEndpointConnectivityOptions(config);\n const result = await checkEndpointConnectivity(baseURL, {\n timeoutMs,\n ...endpointOpts,\n });\n\n if (result.reachable) {\n report({\n phase: \"reachable\",\n endpointId: id,\n baseURL,\n message: result.message ?? \"Connected\",\n });\n } else {\n report({\n phase: \"unreachable\",\n endpointId: id,\n baseURL,\n message: result.message ?? \"Unreachable\",\n });\n throw new Error(buildUnreachableError(id, baseURL, result.message));\n }\n }\n}\n\nasync function resolveDefaultVlmConfig(\n merged: ModelConfigResult,\n options: { installNpmIfMissing?: boolean; modelId?: string } = {},\n): Promise<LLMConfig | null> {\n const sourceSection = merged.vlm ?? merged.llm;\n if (sourceSection == null) return null;\n\n const resolved = await resolveLlmSectionWithNpm(sourceSection, {\n installNpmIfMissing: options.installNpmIfMissing !== false,\n cwd: process.cwd(),\n });\n const { defaultId, configs } = parseLlmSection(resolved);\n const imageConfigs = configs.filter((c: LLMConfig) => c.type === \"image\");\n if (imageConfigs.length === 0) return null;\n const targetId = options.modelId ?? defaultId;\n return imageConfigs.find((c: LLMConfig) => c.id === targetId) ?? imageConfigs[0] ?? null;\n}\n\nfunction resolveEmbedConfig(merged: ModelConfigResult, embedId?: string): LLMConfig | null {\n if (!merged.embed) return null;\n const parsed = parseEmbedSection(merged.embed);\n if (parsed.configs.length === 0) return null;\n const id = embedId ?? parsed.defaultId;\n return parsed.configs.find((c) => c.id === id) ?? parsed.configs[0] ?? null;\n}\n\nfunction createLangChainEmbeddingModelFromConfig(config: LLMConfig): Embeddings {\n const opts = (config.options as Record<string, unknown> | undefined) ?? {};\n const baseURLRaw = typeof config.baseURL === \"string\" ? config.baseURL : undefined;\n const baseURL =\n typeof baseURLRaw === \"string\" && baseURLRaw.length > 0\n ? (baseURLRaw.replace(/\\/$/, \"\").endsWith(\"/v1\") ? baseURLRaw : `${baseURLRaw.replace(/\\/$/, \"\")}/v1`)\n : undefined;\n const apiKey = typeof config.apiKey === \"string\" && config.apiKey.length > 0 ? config.apiKey : \"not-needed\";\n const timeout = typeof opts.timeoutMs === \"number\" ? opts.timeoutMs : undefined;\n const dimensions = typeof opts.dimensions === \"number\" ? opts.dimensions : undefined;\n\n return new OpenAIEmbeddings({\n model: typeof config.model === \"string\" && config.model.length > 0 ? config.model : \"text-embedding-3-small\",\n ...(dimensions != null ? { dimensions } : {}),\n ...(timeout != null ? { timeout } : {}),\n apiKey,\n ...(baseURL ? { configuration: { baseURL } } : {}),\n });\n}\n\nexport async function createAgentModelRegistry(configPathOrOptions?: string | CreateAgentModelRegistryOptions): Promise<AgentModel> {\n const options = normalizeOptions(configPathOrOptions);\n const embeddedConfigPath = resolveEmbeddedConfigPath();\n const base = ensureConfig(embeddedConfigPath);\n const override = options.configPath\n ? ensureConfig(resolve(process.cwd(), options.configPath))\n : undefined;\n const merged = override\n ? deepMerge({} as ModelConfigResult, base, override)\n : base;\n\n const resolveChatArgs = (\n idOrOptions?: string | CreateAgentModelChatOptions,\n maybeOptions?: CreateAgentModelChatOptions,\n ): { id?: string; options: CreateAgentModelChatOptions } => {\n if (typeof idOrOptions === \"string\") return { id: idOrOptions, options: maybeOptions ?? {} };\n return { id: undefined, options: idOrOptions ?? {} };\n };\n\n return {\n async getChatModel(\n idOrOptions?: string | CreateAgentModelChatOptions,\n maybeOptions?: CreateAgentModelChatOptions\n ): Promise<BaseChatModel> {\n const { id, options: chatOptions } = resolveChatArgs(idOrOptions, maybeOptions);\n if (merged.llm == null) {\n throw new Error(\"createAgentModelRegistry failed: no llm section configured\");\n }\n const resolvedSection = await resolveLlmSectionWithNpm(merged.llm, {\n installNpmIfMissing: chatOptions.installNpmIfMissing !== false,\n cwd: process.cwd(),\n });\n const parsed = parseLlmSection(resolvedSection);\n const chosenId = id ?? parsed.defaultId;\n const config = parsed.configs.find((c) => c.id === chosenId) ?? parsed.configs[0];\n if (!config) throw new Error(\"createAgentModelRegistry failed: no chat model configured\");\n const llmSection = { default: config.id, [config.id]: config };\n const checkConnectivity = chatOptions.checkConnectivity ?? merged.runtime.check_connectivity;\n await ensureConnectivity(llmSection, { ...chatOptions, checkConnectivity });\n const model = createChatModelFromLlmConfig({ llmSection });\n applyDefaultToolChoice(model);\n return model;\n },\n getEmbeddingModel(embedId?: string): Embeddings {\n const embedConfig = resolveEmbedConfig(merged, embedId);\n if (!embedConfig) {\n throw new Error(\"createAgentModelRegistry failed: no embed model configured\");\n }\n return createLangChainEmbeddingModelFromConfig(embedConfig);\n },\n async getVlmChatModel(\n idOrOptions?: string | CreateAgentModelChatOptions,\n maybeOptions?: CreateAgentModelChatOptions\n ): Promise<BaseChatModel> {\n const { id, options: chatOptions } = resolveChatArgs(idOrOptions, maybeOptions);\n const vlmConfig = await resolveDefaultVlmConfig(merged, {\n installNpmIfMissing: chatOptions.installNpmIfMissing,\n modelId: id,\n });\n if (!vlmConfig) {\n throw new Error(\"createAgentModelRegistry failed: no vlm/image model configured\");\n }\n const section = {\n default: vlmConfig.id,\n [vlmConfig.id]: vlmConfig,\n };\n const checkConnectivity = chatOptions.checkConnectivity ?? merged.runtime.check_connectivity;\n await ensureConnectivity(section, { ...chatOptions, checkConnectivity });\n const model = createChatModelFromLlmConfig({ llmSection: section });\n applyDefaultToolChoice(model);\n return model;\n },\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/langchain/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
applyToolChoiceAuto,
|
|
3
3
|
createChatModelFromLlmConfig
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-SPDXNDDD.js";
|
|
4
|
+
} from "../chunk-6EQCGQTV.js";
|
|
6
5
|
import "../chunk-G7MKWPEI.js";
|
|
7
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-SPDXNDDD.js";
|
|
8
7
|
export {
|
|
9
8
|
applyToolChoiceAuto,
|
|
10
9
|
createChatModelFromLlmConfig
|