agent-orcha 0.0.7 → 0.0.8
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/README.md +86 -28
- package/dist/lib/agents/agent-executor.d.ts.map +1 -1
- package/dist/lib/agents/agent-executor.js +23 -7
- package/dist/lib/agents/agent-executor.js.map +1 -1
- package/dist/lib/agents/react-loop.d.ts.map +1 -1
- package/dist/lib/agents/react-loop.js +27 -0
- package/dist/lib/agents/react-loop.js.map +1 -1
- package/dist/lib/functions/simple-function-wrapper.js +3 -3
- package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
- package/dist/lib/knowledge/knowledge-store.d.ts +1 -1
- package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
- package/dist/lib/knowledge/knowledge-store.js +25 -4
- package/dist/lib/knowledge/knowledge-store.js.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.d.ts +0 -1
- package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.js +7 -15
- package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
- package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -1
- package/dist/lib/knowledge/sqlite-store.js +19 -10
- package/dist/lib/knowledge/sqlite-store.js.map +1 -1
- package/dist/lib/knowledge/types.d.ts +13 -13
- package/dist/lib/llm/index.d.ts +1 -1
- package/dist/lib/llm/index.d.ts.map +1 -1
- package/dist/lib/llm/index.js +1 -1
- package/dist/lib/llm/index.js.map +1 -1
- package/dist/lib/llm/llm-config.d.ts +51 -8
- package/dist/lib/llm/llm-config.d.ts.map +1 -1
- package/dist/lib/llm/llm-config.js +161 -17
- package/dist/lib/llm/llm-config.js.map +1 -1
- package/dist/lib/llm/llm-factory.d.ts +1 -2
- package/dist/lib/llm/llm-factory.d.ts.map +1 -1
- package/dist/lib/llm/llm-factory.js +41 -8
- package/dist/lib/llm/llm-factory.js.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.d.ts +10 -0
- package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.js +37 -5
- package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.js +41 -10
- package/dist/lib/llm/providers/openai-embeddings.js.map +1 -1
- package/dist/lib/local-llm/binary-manager.d.ts +66 -0
- package/dist/lib/local-llm/binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/binary-manager.js +441 -0
- package/dist/lib/local-llm/binary-manager.js.map +1 -0
- package/dist/lib/local-llm/engine-interface.d.ts +47 -0
- package/dist/lib/local-llm/engine-interface.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-interface.js +2 -0
- package/dist/lib/local-llm/engine-interface.js.map +1 -0
- package/dist/lib/local-llm/engine-registry.d.ts +20 -0
- package/dist/lib/local-llm/engine-registry.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-registry.js +56 -0
- package/dist/lib/local-llm/engine-registry.js.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js +164 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js +161 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js.map +1 -0
- package/dist/lib/local-llm/gguf-reader.d.ts +20 -0
- package/dist/lib/local-llm/gguf-reader.d.ts.map +1 -0
- package/dist/lib/local-llm/gguf-reader.js +190 -0
- package/dist/lib/local-llm/gguf-reader.js.map +1 -0
- package/dist/lib/local-llm/index.d.ts +9 -0
- package/dist/lib/local-llm/index.d.ts.map +1 -0
- package/dist/lib/local-llm/index.js +6 -0
- package/dist/lib/local-llm/index.js.map +1 -0
- package/dist/lib/local-llm/llama-server-process.d.ts +42 -0
- package/dist/lib/local-llm/llama-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/llama-server-process.js +237 -0
- package/dist/lib/local-llm/llama-server-process.js.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts +33 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.js +211 -0
- package/dist/lib/local-llm/mlx-binary-manager.js.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts +26 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.js +210 -0
- package/dist/lib/local-llm/mlx-server-process.js.map +1 -0
- package/dist/lib/local-llm/model-manager.d.ts +33 -0
- package/dist/lib/local-llm/model-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/model-manager.js +591 -0
- package/dist/lib/local-llm/model-manager.js.map +1 -0
- package/dist/lib/local-llm/types.d.ts +51 -0
- package/dist/lib/local-llm/types.d.ts.map +1 -0
- package/dist/lib/local-llm/types.js +2 -0
- package/dist/lib/local-llm/types.js.map +1 -0
- package/dist/lib/logger.d.ts +2 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +68 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/orchestrator.d.ts +9 -0
- package/dist/lib/orchestrator.d.ts.map +1 -1
- package/dist/lib/orchestrator.js +151 -3
- package/dist/lib/orchestrator.js.map +1 -1
- package/dist/lib/sandbox/cdp-client.d.ts +2 -1
- package/dist/lib/sandbox/cdp-client.d.ts.map +1 -1
- package/dist/lib/sandbox/cdp-client.js +33 -7
- package/dist/lib/sandbox/cdp-client.js.map +1 -1
- package/dist/lib/sandbox/index.d.ts +1 -0
- package/dist/lib/sandbox/index.d.ts.map +1 -1
- package/dist/lib/sandbox/index.js +1 -0
- package/dist/lib/sandbox/index.js.map +1 -1
- package/dist/lib/sandbox/page-readiness.d.ts.map +1 -1
- package/dist/lib/sandbox/page-readiness.js +33 -0
- package/dist/lib/sandbox/page-readiness.js.map +1 -1
- package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-browser.js +14 -1
- package/dist/lib/sandbox/sandbox-browser.js.map +1 -1
- package/dist/lib/sandbox/sandbox-container.d.ts +39 -0
- package/dist/lib/sandbox/sandbox-container.d.ts.map +1 -0
- package/dist/lib/sandbox/sandbox-container.js +176 -0
- package/dist/lib/sandbox/sandbox-container.js.map +1 -0
- package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-file.js +5 -4
- package/dist/lib/sandbox/sandbox-file.js.map +1 -1
- package/dist/lib/sandbox/sandbox-shell.d.ts +2 -1
- package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-shell.js +42 -24
- package/dist/lib/sandbox/sandbox-shell.js.map +1 -1
- package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-web.js +27 -2
- package/dist/lib/sandbox/sandbox-web.js.map +1 -1
- package/dist/lib/sandbox/vision-browser.d.ts.map +1 -1
- package/dist/lib/sandbox/vision-browser.js +9 -0
- package/dist/lib/sandbox/vision-browser.js.map +1 -1
- package/dist/lib/sea/app-window.d.ts +7 -0
- package/dist/lib/sea/app-window.d.ts.map +1 -0
- package/dist/lib/sea/app-window.js +95 -0
- package/dist/lib/sea/app-window.js.map +1 -0
- package/dist/lib/sea/bootstrap.d.ts +18 -0
- package/dist/lib/sea/bootstrap.d.ts.map +1 -0
- package/dist/lib/sea/bootstrap.js +103 -0
- package/dist/lib/sea/bootstrap.js.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts +3 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.js +10 -0
- package/dist/lib/sea/sqlite-vec-shim.js.map +1 -0
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +7 -13
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +2 -4
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-search.tool.js +4 -4
- package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.js +70 -37
- package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-tools-factory.js +2 -2
- package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js +5 -11
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.js +5 -4
- package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
- package/dist/lib/types/tool-factory.d.ts.map +1 -1
- package/dist/lib/types/tool-factory.js +9 -2
- package/dist/lib/types/tool-factory.js.map +1 -1
- package/dist/lib/utils/document-extract.d.ts +10 -0
- package/dist/lib/utils/document-extract.d.ts.map +1 -0
- package/dist/lib/utils/document-extract.js +149 -0
- package/dist/lib/utils/document-extract.js.map +1 -0
- package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -1
- package/dist/lib/workflows/react-workflow-executor.js +20 -14
- package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
- package/dist/lib/workflows/types.d.ts +71 -45
- package/dist/lib/workflows/types.d.ts.map +1 -1
- package/dist/lib/workflows/types.js +10 -0
- package/dist/lib/workflows/types.js.map +1 -1
- package/dist/public/assets/logo.png +0 -0
- package/dist/public/chat.html +3 -78
- package/dist/public/index.html +3 -330
- package/dist/public/src/components/AgentComposer.js +132 -132
- package/dist/public/src/components/AgentsView.js +1231 -350
- package/dist/public/src/components/AppRoot.js +101 -39
- package/dist/public/src/components/GraphView.js +11 -13
- package/dist/public/src/components/IdeView.js +133 -98
- package/dist/public/src/components/KnowledgeView.js +94 -130
- package/dist/public/src/components/LlmView.js +15 -19
- package/dist/public/src/components/LocalLlmView.js +2440 -0
- package/dist/public/src/components/LogViewer.js +155 -0
- package/dist/public/src/components/McpView.js +41 -49
- package/dist/public/src/components/MonitorView.js +79 -126
- package/dist/public/src/components/NavBar.js +16 -26
- package/dist/public/src/components/StandaloneChat.js +136 -150
- package/dist/public/src/services/ApiService.js +196 -2
- package/dist/public/src/services/SessionStore.js +6 -3
- package/dist/public/src/services/StreamManager.js +183 -0
- package/dist/public/src/store.js +1 -1
- package/dist/public/src/utils/card.js +21 -0
- package/dist/public/src/utils/markdown.js +1 -7
- package/dist/public/styles.css +2777 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +7 -1
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/start.d.ts.map +1 -1
- package/dist/src/cli/commands/start.js +28 -5
- package/dist/src/cli/commands/start.js.map +1 -1
- package/dist/src/cli/index.js +13 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/index.js +7 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/routes/agents.route.d.ts.map +1 -1
- package/dist/src/routes/agents.route.js +2 -0
- package/dist/src/routes/agents.route.js.map +1 -1
- package/dist/src/routes/chat.route.d.ts.map +1 -1
- package/dist/src/routes/chat.route.js +3 -2
- package/dist/src/routes/chat.route.js.map +1 -1
- package/dist/src/routes/llm.route.d.ts.map +1 -1
- package/dist/src/routes/llm.route.js +227 -7
- package/dist/src/routes/llm.route.js.map +1 -1
- package/dist/src/routes/local-llm.route.d.ts +3 -0
- package/dist/src/routes/local-llm.route.d.ts.map +1 -0
- package/dist/src/routes/local-llm.route.js +688 -0
- package/dist/src/routes/local-llm.route.js.map +1 -0
- package/dist/src/routes/logs.route.d.ts +3 -0
- package/dist/src/routes/logs.route.d.ts.map +1 -0
- package/dist/src/routes/logs.route.js +24 -0
- package/dist/src/routes/logs.route.js.map +1 -0
- package/dist/src/routes/vnc.route.d.ts +10 -1
- package/dist/src/routes/vnc.route.d.ts.map +1 -1
- package/dist/src/routes/vnc.route.js +37 -12
- package/dist/src/routes/vnc.route.js.map +1 -1
- package/dist/src/routes/workflows.route.d.ts.map +1 -1
- package/dist/src/routes/workflows.route.js +24 -0
- package/dist/src/routes/workflows.route.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +24 -2
- package/dist/src/server.js.map +1 -1
- package/dist/templates/agents/actor.agent.yaml +34 -0
- package/dist/templates/agents/architect.agent.yaml +0 -1
- package/dist/templates/agents/chatbot.agent.yaml +0 -1
- package/dist/templates/agents/corporate.agent.yaml +0 -1
- package/dist/templates/agents/functions.agent.yaml +29 -0
- package/dist/templates/agents/investment-analyst.agent.yaml +0 -1
- package/dist/templates/agents/music-librarian.agent.yaml +3 -27
- package/dist/templates/agents/network-security.agent.yaml +0 -1
- package/dist/templates/agents/transport-security.agent.yaml +0 -1
- package/dist/templates/agents/web-engineer.agent.yaml +3 -4
- package/dist/templates/agents/web-pilot.agent.yaml +0 -1
- package/dist/templates/knowledge/patient-records.knowledge.yaml +20 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_0.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_1.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_10.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_11.pdf +0 -0
- package/dist/templates/knowledge/web-docs.knowledge.yaml +1 -1
- package/dist/templates/llm.json +73 -10
- package/dist/templates/skills/orcha-builder/SKILL.md +56 -3
- package/dist/templates/workflows/example.workflow.yaml +27 -35
- package/dist/templates/workflows/react-example.workflow.yaml +14 -19
- package/dist/templates/workflows/team-chat.workflow.yaml +47 -0
- package/package.json +14 -6
- package/dist/public/src/components/SkillsView.js +0 -137
- package/dist/public/src/components/WorkflowsView.js +0 -568
|
@@ -7,31 +7,41 @@ import type { LLMProvider } from './provider-detector.ts';
|
|
|
7
7
|
export declare function resolveApiKey(provider: LLMProvider, apiKey?: string): string | undefined;
|
|
8
8
|
export declare const ModelConfigSchema: z.ZodObject<{
|
|
9
9
|
provider: z.ZodOptional<z.ZodEnum<["openai", "gemini", "anthropic", "local"]>>;
|
|
10
|
+
engine: z.ZodOptional<z.ZodEnum<["llama-cpp", "mlx-serve", "ollama", "lmstudio"]>>;
|
|
10
11
|
baseUrl: z.ZodOptional<z.ZodString>;
|
|
11
12
|
apiKey: z.ZodOptional<z.ZodString>;
|
|
12
13
|
model: z.ZodString;
|
|
13
14
|
temperature: z.ZodOptional<z.ZodNumber>;
|
|
14
15
|
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
15
16
|
thinkingBudget: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
reasoningBudget: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
contextSize: z.ZodOptional<z.ZodNumber>;
|
|
16
19
|
}, "strip", z.ZodTypeAny, {
|
|
17
20
|
model: string;
|
|
18
21
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
22
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
19
23
|
baseUrl?: string | undefined;
|
|
20
24
|
apiKey?: string | undefined;
|
|
21
25
|
temperature?: number | undefined;
|
|
22
26
|
maxTokens?: number | undefined;
|
|
23
27
|
thinkingBudget?: number | undefined;
|
|
28
|
+
reasoningBudget?: number | undefined;
|
|
29
|
+
contextSize?: number | undefined;
|
|
24
30
|
}, {
|
|
25
31
|
model: string;
|
|
26
32
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
33
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
27
34
|
baseUrl?: string | undefined;
|
|
28
35
|
apiKey?: string | undefined;
|
|
29
36
|
temperature?: number | undefined;
|
|
30
37
|
maxTokens?: number | undefined;
|
|
31
38
|
thinkingBudget?: number | undefined;
|
|
39
|
+
reasoningBudget?: number | undefined;
|
|
40
|
+
contextSize?: number | undefined;
|
|
32
41
|
}>;
|
|
33
42
|
export declare const EmbeddingModelConfigSchema: z.ZodObject<{
|
|
34
43
|
provider: z.ZodOptional<z.ZodEnum<["openai", "gemini", "anthropic", "local"]>>;
|
|
44
|
+
engine: z.ZodOptional<z.ZodEnum<["llama-cpp", "mlx-serve", "ollama", "lmstudio"]>>;
|
|
35
45
|
baseUrl: z.ZodOptional<z.ZodString>;
|
|
36
46
|
apiKey: z.ZodOptional<z.ZodString>;
|
|
37
47
|
model: z.ZodString;
|
|
@@ -40,6 +50,7 @@ export declare const EmbeddingModelConfigSchema: z.ZodObject<{
|
|
|
40
50
|
}, "strip", z.ZodTypeAny, {
|
|
41
51
|
model: string;
|
|
42
52
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
53
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
43
54
|
baseUrl?: string | undefined;
|
|
44
55
|
apiKey?: string | undefined;
|
|
45
56
|
dimensions?: number | undefined;
|
|
@@ -47,6 +58,7 @@ export declare const EmbeddingModelConfigSchema: z.ZodObject<{
|
|
|
47
58
|
}, {
|
|
48
59
|
model: string;
|
|
49
60
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
61
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
50
62
|
baseUrl?: string | undefined;
|
|
51
63
|
apiKey?: string | undefined;
|
|
52
64
|
dimensions?: number | undefined;
|
|
@@ -54,33 +66,43 @@ export declare const EmbeddingModelConfigSchema: z.ZodObject<{
|
|
|
54
66
|
}>;
|
|
55
67
|
export declare const LLMJsonConfigSchema: z.ZodObject<{
|
|
56
68
|
version: z.ZodDefault<z.ZodString>;
|
|
57
|
-
models: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
69
|
+
models: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
58
70
|
provider: z.ZodOptional<z.ZodEnum<["openai", "gemini", "anthropic", "local"]>>;
|
|
71
|
+
engine: z.ZodOptional<z.ZodEnum<["llama-cpp", "mlx-serve", "ollama", "lmstudio"]>>;
|
|
59
72
|
baseUrl: z.ZodOptional<z.ZodString>;
|
|
60
73
|
apiKey: z.ZodOptional<z.ZodString>;
|
|
61
74
|
model: z.ZodString;
|
|
62
75
|
temperature: z.ZodOptional<z.ZodNumber>;
|
|
63
76
|
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
64
77
|
thinkingBudget: z.ZodOptional<z.ZodNumber>;
|
|
78
|
+
reasoningBudget: z.ZodOptional<z.ZodNumber>;
|
|
79
|
+
contextSize: z.ZodOptional<z.ZodNumber>;
|
|
65
80
|
}, "strip", z.ZodTypeAny, {
|
|
66
81
|
model: string;
|
|
67
82
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
83
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
68
84
|
baseUrl?: string | undefined;
|
|
69
85
|
apiKey?: string | undefined;
|
|
70
86
|
temperature?: number | undefined;
|
|
71
87
|
maxTokens?: number | undefined;
|
|
72
88
|
thinkingBudget?: number | undefined;
|
|
89
|
+
reasoningBudget?: number | undefined;
|
|
90
|
+
contextSize?: number | undefined;
|
|
73
91
|
}, {
|
|
74
92
|
model: string;
|
|
75
93
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
94
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
76
95
|
baseUrl?: string | undefined;
|
|
77
96
|
apiKey?: string | undefined;
|
|
78
97
|
temperature?: number | undefined;
|
|
79
98
|
maxTokens?: number | undefined;
|
|
80
99
|
thinkingBudget?: number | undefined;
|
|
81
|
-
|
|
82
|
-
|
|
100
|
+
reasoningBudget?: number | undefined;
|
|
101
|
+
contextSize?: number | undefined;
|
|
102
|
+
}>]>>;
|
|
103
|
+
embeddings: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
83
104
|
provider: z.ZodOptional<z.ZodEnum<["openai", "gemini", "anthropic", "local"]>>;
|
|
105
|
+
engine: z.ZodOptional<z.ZodEnum<["llama-cpp", "mlx-serve", "ollama", "lmstudio"]>>;
|
|
84
106
|
baseUrl: z.ZodOptional<z.ZodString>;
|
|
85
107
|
apiKey: z.ZodOptional<z.ZodString>;
|
|
86
108
|
model: z.ZodString;
|
|
@@ -89,6 +111,7 @@ export declare const LLMJsonConfigSchema: z.ZodObject<{
|
|
|
89
111
|
}, "strip", z.ZodTypeAny, {
|
|
90
112
|
model: string;
|
|
91
113
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
114
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
92
115
|
baseUrl?: string | undefined;
|
|
93
116
|
apiKey?: string | undefined;
|
|
94
117
|
dimensions?: number | undefined;
|
|
@@ -96,49 +119,61 @@ export declare const LLMJsonConfigSchema: z.ZodObject<{
|
|
|
96
119
|
}, {
|
|
97
120
|
model: string;
|
|
98
121
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
122
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
99
123
|
baseUrl?: string | undefined;
|
|
100
124
|
apiKey?: string | undefined;
|
|
101
125
|
dimensions?: number | undefined;
|
|
102
126
|
eosToken?: string | undefined;
|
|
103
|
-
}>>;
|
|
127
|
+
}>]>>;
|
|
128
|
+
engineUrls: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
104
129
|
}, "strip", z.ZodTypeAny, {
|
|
105
130
|
version: string;
|
|
106
|
-
models: Record<string, {
|
|
131
|
+
models: Record<string, string | {
|
|
107
132
|
model: string;
|
|
108
133
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
134
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
109
135
|
baseUrl?: string | undefined;
|
|
110
136
|
apiKey?: string | undefined;
|
|
111
137
|
temperature?: number | undefined;
|
|
112
138
|
maxTokens?: number | undefined;
|
|
113
139
|
thinkingBudget?: number | undefined;
|
|
140
|
+
reasoningBudget?: number | undefined;
|
|
141
|
+
contextSize?: number | undefined;
|
|
114
142
|
}>;
|
|
115
|
-
embeddings: Record<string, {
|
|
143
|
+
embeddings: Record<string, string | {
|
|
116
144
|
model: string;
|
|
117
145
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
146
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
118
147
|
baseUrl?: string | undefined;
|
|
119
148
|
apiKey?: string | undefined;
|
|
120
149
|
dimensions?: number | undefined;
|
|
121
150
|
eosToken?: string | undefined;
|
|
122
151
|
}>;
|
|
152
|
+
engineUrls?: Record<string, string> | undefined;
|
|
123
153
|
}, {
|
|
124
|
-
models: Record<string, {
|
|
154
|
+
models: Record<string, string | {
|
|
125
155
|
model: string;
|
|
126
156
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
157
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
127
158
|
baseUrl?: string | undefined;
|
|
128
159
|
apiKey?: string | undefined;
|
|
129
160
|
temperature?: number | undefined;
|
|
130
161
|
maxTokens?: number | undefined;
|
|
131
162
|
thinkingBudget?: number | undefined;
|
|
163
|
+
reasoningBudget?: number | undefined;
|
|
164
|
+
contextSize?: number | undefined;
|
|
132
165
|
}>;
|
|
133
|
-
embeddings: Record<string, {
|
|
166
|
+
embeddings: Record<string, string | {
|
|
134
167
|
model: string;
|
|
135
168
|
provider?: "openai" | "gemini" | "anthropic" | "local" | undefined;
|
|
169
|
+
engine?: "llama-cpp" | "mlx-serve" | "ollama" | "lmstudio" | undefined;
|
|
136
170
|
baseUrl?: string | undefined;
|
|
137
171
|
apiKey?: string | undefined;
|
|
138
172
|
dimensions?: number | undefined;
|
|
139
173
|
eosToken?: string | undefined;
|
|
140
174
|
}>;
|
|
141
175
|
version?: string | undefined;
|
|
176
|
+
engineUrls?: Record<string, string> | undefined;
|
|
142
177
|
}>;
|
|
143
178
|
export type ModelConfig = z.infer<typeof ModelConfigSchema>;
|
|
144
179
|
export type EmbeddingModelConfig = z.infer<typeof EmbeddingModelConfigSchema>;
|
|
@@ -146,7 +181,15 @@ export type LLMJsonConfig = z.infer<typeof LLMJsonConfigSchema>;
|
|
|
146
181
|
export declare function loadLLMConfig(llmJsonPath: string): Promise<LLMJsonConfig>;
|
|
147
182
|
export declare function getModelConfig(name: string): ModelConfig;
|
|
148
183
|
export declare function getEmbeddingConfig(name: string): EmbeddingModelConfig;
|
|
184
|
+
/**
|
|
185
|
+
* Resolve the actual key name that `default` (or any pointer) references.
|
|
186
|
+
* Returns the resolved key name, or the input if it's already a concrete entry.
|
|
187
|
+
*/
|
|
188
|
+
export declare function resolveDefaultName(section: 'models' | 'embeddings', name?: string): string;
|
|
149
189
|
export declare function listModelConfigs(): string[];
|
|
150
190
|
export declare function listEmbeddingConfigs(): string[];
|
|
151
191
|
export declare function isLLMConfigLoaded(): boolean;
|
|
192
|
+
export declare function getLLMConfig(): LLMJsonConfig | null;
|
|
193
|
+
export declare function getLLMConfigPath(): string | null;
|
|
194
|
+
export declare function saveLLMConfig(llmJsonPath: string, config: LLMJsonConfig): Promise<void>;
|
|
152
195
|
//# sourceMappingURL=llm-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-config.d.ts","sourceRoot":"","sources":["../../../lib/llm/llm-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"llm-config.d.ts","sourceRoot":"","sources":["../../../lib/llm/llm-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQxF;AAGD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;EAQrC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAgDhE,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B/E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAgBxD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAgBrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,YAAY,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAKrG;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAM3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAK/C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,YAAY,IAAI,aAAa,GAAG,IAAI,CAEnD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEhD;AAgDD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F"}
|
|
@@ -13,24 +13,32 @@ const PROVIDER_ENV_VARS = {
|
|
|
13
13
|
* Priority: explicit apiKey in config > provider-specific env var.
|
|
14
14
|
*/
|
|
15
15
|
export function resolveApiKey(provider, apiKey) {
|
|
16
|
-
if (apiKey)
|
|
16
|
+
if (apiKey) {
|
|
17
|
+
const resolved = substituteEnvVars(apiKey);
|
|
18
|
+
if (resolved !== apiKey)
|
|
19
|
+
return resolved || undefined;
|
|
17
20
|
return apiKey;
|
|
21
|
+
}
|
|
18
22
|
const envVar = PROVIDER_ENV_VARS[provider];
|
|
19
23
|
return process.env[envVar];
|
|
20
24
|
}
|
|
21
25
|
// Schema for individual model configuration
|
|
22
26
|
export const ModelConfigSchema = z.object({
|
|
23
27
|
provider: z.enum(['openai', 'gemini', 'anthropic', 'local']).optional(),
|
|
28
|
+
engine: z.enum(['llama-cpp', 'mlx-serve', 'ollama', 'lmstudio']).optional(),
|
|
24
29
|
baseUrl: z.string().optional(),
|
|
25
30
|
apiKey: z.string().optional(),
|
|
26
31
|
model: z.string(),
|
|
27
32
|
temperature: z.number().min(0).max(2).optional(),
|
|
28
33
|
maxTokens: z.number().optional(),
|
|
29
34
|
thinkingBudget: z.number().optional(),
|
|
35
|
+
reasoningBudget: z.number().optional(),
|
|
36
|
+
contextSize: z.number().optional(),
|
|
30
37
|
});
|
|
31
38
|
// Schema for individual embedding configuration
|
|
32
39
|
export const EmbeddingModelConfigSchema = z.object({
|
|
33
40
|
provider: z.enum(['openai', 'gemini', 'anthropic', 'local']).optional(),
|
|
41
|
+
engine: z.enum(['llama-cpp', 'mlx-serve', 'ollama', 'lmstudio']).optional(),
|
|
34
42
|
baseUrl: z.string().optional(),
|
|
35
43
|
apiKey: z.string().optional(),
|
|
36
44
|
model: z.string(),
|
|
@@ -38,28 +46,91 @@ export const EmbeddingModelConfigSchema = z.object({
|
|
|
38
46
|
eosToken: z.string().optional(), // EOS token to append to text (e.g., for Nomic models)
|
|
39
47
|
});
|
|
40
48
|
// Schema for the entire llm.json file
|
|
49
|
+
// `default` (and any key) can be either a full config object or a string pointer to another key
|
|
41
50
|
export const LLMJsonConfigSchema = z.object({
|
|
42
51
|
version: z.string().default('1.0'),
|
|
43
|
-
models: z.record(z.string(), ModelConfigSchema),
|
|
44
|
-
embeddings: z.record(z.string(), EmbeddingModelConfigSchema),
|
|
52
|
+
models: z.record(z.string(), z.union([z.string(), ModelConfigSchema])),
|
|
53
|
+
embeddings: z.record(z.string(), z.union([z.string(), EmbeddingModelConfigSchema])),
|
|
54
|
+
engineUrls: z.record(z.string(), z.string()).optional(),
|
|
45
55
|
});
|
|
46
56
|
// Singleton config manager
|
|
47
|
-
let loadedConfig = null;
|
|
57
|
+
let loadedConfig = null; // runtime (env vars resolved)
|
|
58
|
+
let rawConfig = null; // disk-safe (${...} references preserved)
|
|
59
|
+
let loadedConfigPath = null;
|
|
60
|
+
/**
|
|
61
|
+
* Detect engine/provider key name from a model config object.
|
|
62
|
+
* Prefers `engine` (e.g. 'llama-cpp', 'mlx-serve'), falls back to `provider`.
|
|
63
|
+
*/
|
|
64
|
+
function detectKeyName(entry) {
|
|
65
|
+
return entry.engine || entry.provider || 'unknown';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Migrate old format where `default` is a full config object to the new pointer format.
|
|
69
|
+
* Moves the object to a named key and sets `default` to that key string.
|
|
70
|
+
*/
|
|
71
|
+
function migrateSection(section) {
|
|
72
|
+
const defaultVal = section['default'];
|
|
73
|
+
if (defaultVal && typeof defaultVal === 'object') {
|
|
74
|
+
const keyName = detectKeyName(defaultVal);
|
|
75
|
+
section[keyName] = defaultVal;
|
|
76
|
+
section['default'] = keyName;
|
|
77
|
+
// Also migrate `default_old` if present (legacy backup key)
|
|
78
|
+
const oldVal = section['default_old'];
|
|
79
|
+
if (oldVal && typeof oldVal === 'object') {
|
|
80
|
+
const oldKey = detectKeyName(oldVal);
|
|
81
|
+
if (!section[oldKey]) {
|
|
82
|
+
section[oldKey] = oldVal;
|
|
83
|
+
}
|
|
84
|
+
delete section['default_old'];
|
|
85
|
+
}
|
|
86
|
+
// Migrate `local-llama` legacy key
|
|
87
|
+
const localLlama = section['local-llama'];
|
|
88
|
+
if (localLlama && typeof localLlama === 'object') {
|
|
89
|
+
const llamaKey = detectKeyName(localLlama);
|
|
90
|
+
if (!section[llamaKey] || section['default'] !== llamaKey) {
|
|
91
|
+
section[llamaKey] = localLlama;
|
|
92
|
+
}
|
|
93
|
+
delete section['local-llama'];
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
48
99
|
export async function loadLLMConfig(llmJsonPath) {
|
|
49
100
|
const content = await fs.readFile(llmJsonPath, 'utf-8');
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
101
|
+
// Parse raw (no env substitution) — this is what we write back to disk
|
|
102
|
+
const rawParsed = LLMJsonConfigSchema.parse(JSON.parse(content));
|
|
103
|
+
// Parse resolved (with env substitution) — this is what runtime uses
|
|
104
|
+
const resolvedParsed = LLMJsonConfigSchema.parse(JSON.parse(substituteEnvVars(content)));
|
|
105
|
+
// Auto-migrate old format (default = object) to new format (default = string pointer)
|
|
106
|
+
// Migrate both raw and resolved configs identically
|
|
107
|
+
let migrated = false;
|
|
108
|
+
migrated = migrateSection(rawParsed.models) || migrated;
|
|
109
|
+
migrated = migrateSection(rawParsed.embeddings) || migrated;
|
|
110
|
+
migrateSection(resolvedParsed.models);
|
|
111
|
+
migrateSection(resolvedParsed.embeddings);
|
|
112
|
+
rawConfig = rawParsed;
|
|
113
|
+
loadedConfig = resolvedParsed;
|
|
114
|
+
loadedConfigPath = llmJsonPath;
|
|
115
|
+
if (migrated) {
|
|
116
|
+
logger.info('[LLMConfig] Migrated old format to pointer-based config');
|
|
117
|
+
// Write the RAW config (preserves ${...} env var references)
|
|
118
|
+
await fs.writeFile(llmJsonPath, JSON.stringify(rawParsed, null, 2));
|
|
119
|
+
}
|
|
120
|
+
logger.info(`[LLMConfig] Loaded ${Object.keys(resolvedParsed.models).length} model(s), ${Object.keys(resolvedParsed.embeddings).length} embedding(s)`);
|
|
121
|
+
return resolvedParsed;
|
|
55
122
|
}
|
|
56
123
|
export function getModelConfig(name) {
|
|
57
124
|
if (!loadedConfig) {
|
|
58
125
|
throw new Error('LLM config not loaded. Call loadLLMConfig() first.');
|
|
59
126
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
127
|
+
let config = loadedConfig.models[name];
|
|
128
|
+
// Dereference string pointer (one level)
|
|
129
|
+
if (typeof config === 'string') {
|
|
130
|
+
config = loadedConfig.models[config];
|
|
131
|
+
}
|
|
132
|
+
if (!config || typeof config === 'string') {
|
|
133
|
+
const available = Object.keys(loadedConfig.models).filter(k => typeof loadedConfig.models[k] !== 'string').join(', ');
|
|
63
134
|
throw new Error(`Model config "${name}" not found. Available: ${available}`);
|
|
64
135
|
}
|
|
65
136
|
return config;
|
|
@@ -68,26 +139,99 @@ export function getEmbeddingConfig(name) {
|
|
|
68
139
|
if (!loadedConfig) {
|
|
69
140
|
throw new Error('LLM config not loaded. Call loadLLMConfig() first.');
|
|
70
141
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
142
|
+
let config = loadedConfig.embeddings[name];
|
|
143
|
+
// Dereference string pointer (one level)
|
|
144
|
+
if (typeof config === 'string') {
|
|
145
|
+
config = loadedConfig.embeddings[config];
|
|
146
|
+
}
|
|
147
|
+
if (!config || typeof config === 'string') {
|
|
148
|
+
const available = Object.keys(loadedConfig.embeddings).filter(k => typeof loadedConfig.embeddings[k] !== 'string').join(', ');
|
|
74
149
|
throw new Error(`Embedding config "${name}" not found. Available: ${available}`);
|
|
75
150
|
}
|
|
76
151
|
return config;
|
|
77
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Resolve the actual key name that `default` (or any pointer) references.
|
|
155
|
+
* Returns the resolved key name, or the input if it's already a concrete entry.
|
|
156
|
+
*/
|
|
157
|
+
export function resolveDefaultName(section, name = 'default') {
|
|
158
|
+
if (!loadedConfig)
|
|
159
|
+
return name;
|
|
160
|
+
const val = loadedConfig[section][name];
|
|
161
|
+
if (typeof val === 'string')
|
|
162
|
+
return val;
|
|
163
|
+
return name;
|
|
164
|
+
}
|
|
78
165
|
export function listModelConfigs() {
|
|
79
166
|
if (!loadedConfig) {
|
|
80
167
|
return [];
|
|
81
168
|
}
|
|
82
|
-
return
|
|
169
|
+
// Filter out string pointers — only return concrete config entries
|
|
170
|
+
return Object.keys(loadedConfig.models).filter(k => typeof loadedConfig.models[k] !== 'string');
|
|
83
171
|
}
|
|
84
172
|
export function listEmbeddingConfigs() {
|
|
85
173
|
if (!loadedConfig) {
|
|
86
174
|
return [];
|
|
87
175
|
}
|
|
88
|
-
return Object.keys(loadedConfig.embeddings);
|
|
176
|
+
return Object.keys(loadedConfig.embeddings).filter(k => typeof loadedConfig.embeddings[k] !== 'string');
|
|
89
177
|
}
|
|
90
178
|
export function isLLMConfigLoaded() {
|
|
91
179
|
return loadedConfig !== null;
|
|
92
180
|
}
|
|
181
|
+
export function getLLMConfig() {
|
|
182
|
+
return loadedConfig;
|
|
183
|
+
}
|
|
184
|
+
export function getLLMConfigPath() {
|
|
185
|
+
return loadedConfigPath;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Sync changes from the resolved runtime config into rawConfig,
|
|
189
|
+
* preserving ${...} env var references in apiKey fields.
|
|
190
|
+
*/
|
|
191
|
+
function syncToRaw(config) {
|
|
192
|
+
if (!rawConfig) {
|
|
193
|
+
rawConfig = structuredClone(config);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
for (const section of ['models', 'embeddings']) {
|
|
197
|
+
const rawSection = rawConfig[section];
|
|
198
|
+
const newSection = config[section];
|
|
199
|
+
// Remove keys that were deleted
|
|
200
|
+
for (const key of Object.keys(rawSection)) {
|
|
201
|
+
if (!(key in newSection))
|
|
202
|
+
delete rawSection[key];
|
|
203
|
+
}
|
|
204
|
+
// Add/update keys
|
|
205
|
+
for (const [key, value] of Object.entries(newSection)) {
|
|
206
|
+
if (typeof value === 'string') {
|
|
207
|
+
// String pointer (e.g. "default": "llama-cpp")
|
|
208
|
+
rawSection[key] = value;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const rawEntry = rawSection[key];
|
|
212
|
+
if (rawEntry && typeof rawEntry === 'object') {
|
|
213
|
+
// Existing entry — preserve ${...} apiKey reference
|
|
214
|
+
const rawApiKey = rawEntry.apiKey;
|
|
215
|
+
rawSection[key] = { ...value };
|
|
216
|
+
if (rawApiKey && typeof rawApiKey === 'string' && rawApiKey.includes('${')) {
|
|
217
|
+
rawSection[key].apiKey = rawApiKey;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// New entry — write as-is
|
|
222
|
+
rawSection[key] = { ...value };
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Sync top-level fields
|
|
228
|
+
rawConfig.version = config.version;
|
|
229
|
+
rawConfig.engineUrls = config.engineUrls ? { ...config.engineUrls } : undefined;
|
|
230
|
+
}
|
|
231
|
+
export async function saveLLMConfig(llmJsonPath, config) {
|
|
232
|
+
syncToRaw(config);
|
|
233
|
+
await fs.writeFile(llmJsonPath, JSON.stringify(rawConfig, null, 2));
|
|
234
|
+
loadedConfig = config;
|
|
235
|
+
logger.info(`[LLMConfig] Saved config with ${Object.keys(config.models).length} model(s), ${Object.keys(config.embeddings).length} embedding(s)`);
|
|
236
|
+
}
|
|
93
237
|
//# sourceMappingURL=llm-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-config.js","sourceRoot":"","sources":["../../../lib/llm/llm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,iBAAiB,GAAgC;IACrD,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,mBAAmB;IAC9B,KAAK,EAAE,gBAAgB;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAqB,EAAE,MAAe;IAClE,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"llm-config.js","sourceRoot":"","sources":["../../../lib/llm/llm-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,10 @@ export declare class LLMFactory {
|
|
|
6
6
|
* Create an LLM instance from a config name (defined in llm.json)
|
|
7
7
|
* @param ref - Config name as string, or object with name and optional temperature override
|
|
8
8
|
*/
|
|
9
|
-
static create(ref?: AgentLLMRef): ChatModel
|
|
9
|
+
static create(ref?: AgentLLMRef): Promise<ChatModel>;
|
|
10
10
|
private static createOpenAI;
|
|
11
11
|
private static createGemini;
|
|
12
12
|
private static createAnthropic;
|
|
13
|
-
private static createLocal;
|
|
14
13
|
private static getCacheKey;
|
|
15
14
|
static clearCache(): void;
|
|
16
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-factory.d.ts","sourceRoot":"","sources":["../../../lib/llm/llm-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-factory.d.ts","sourceRoot":"","sources":["../../../lib/llm/llm-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAKlE,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqC;IAE7D;;;OAGG;WACU,MAAM,CAAC,GAAG,GAAE,WAAuB,GAAG,OAAO,CAAC,SAAS,CAAC;IA+DrE,OAAO,CAAC,MAAM,CAAC,YAAY;IAyB3B,OAAO,CAAC,MAAM,CAAC,YAAY;IAU3B,OAAO,CAAC,MAAM,CAAC,eAAe;IAY9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,MAAM,CAAC,UAAU,IAAI,IAAI;CAG1B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { OpenAIChatModel } from "./providers/openai-chat-model.js";
|
|
2
2
|
import { AnthropicChatModel } from "./providers/anthropic-chat-model.js";
|
|
3
3
|
import { GeminiChatModel } from "./providers/gemini-chat-model.js";
|
|
4
|
-
import { getModelConfig, resolveApiKey } from "./llm-config.js";
|
|
4
|
+
import { getModelConfig, getLLMConfig, getLLMConfigPath, saveLLMConfig, resolveApiKey } from "./llm-config.js";
|
|
5
5
|
import { resolveAgentLLMRef } from "./types.js";
|
|
6
6
|
import { detectProvider } from "./provider-detector.js";
|
|
7
|
+
import { engineRegistry } from "../local-llm/engine-registry.js";
|
|
7
8
|
import { logger } from "../logger.js";
|
|
8
9
|
export class LLMFactory {
|
|
9
10
|
static instances = new Map();
|
|
@@ -11,7 +12,7 @@ export class LLMFactory {
|
|
|
11
12
|
* Create an LLM instance from a config name (defined in llm.json)
|
|
12
13
|
* @param ref - Config name as string, or object with name and optional temperature override
|
|
13
14
|
*/
|
|
14
|
-
static create(ref = 'default') {
|
|
15
|
+
static async create(ref = 'default') {
|
|
15
16
|
const { name, temperature: tempOverride } = resolveAgentLLMRef(ref);
|
|
16
17
|
const config = getModelConfig(name);
|
|
17
18
|
const provider = detectProvider(config);
|
|
@@ -22,6 +23,29 @@ export class LLMFactory {
|
|
|
22
23
|
if (cached) {
|
|
23
24
|
return cached;
|
|
24
25
|
}
|
|
26
|
+
// Auto-start local engine if needed (skip if user provides their own baseUrl)
|
|
27
|
+
if (provider === 'local' && !config.baseUrl) {
|
|
28
|
+
const engineName = config.engine ?? 'llama-cpp';
|
|
29
|
+
const engine = engineRegistry.getEngine(engineName);
|
|
30
|
+
if (!engine)
|
|
31
|
+
throw new Error(`Unknown local engine: ${engineName}`);
|
|
32
|
+
await engine.ensureRunningChat(config.model, {
|
|
33
|
+
contextSize: config.contextSize,
|
|
34
|
+
reasoningBudget: config.reasoningBudget,
|
|
35
|
+
});
|
|
36
|
+
// Persist auto-detected contextSize to llm.json
|
|
37
|
+
if (!config.contextSize) {
|
|
38
|
+
const detectedCtx = engine.getChatStatus().contextSize;
|
|
39
|
+
if (detectedCtx) {
|
|
40
|
+
config.contextSize = detectedCtx;
|
|
41
|
+
const fullConfig = getLLMConfig();
|
|
42
|
+
const configPath = getLLMConfigPath();
|
|
43
|
+
if (fullConfig && configPath) {
|
|
44
|
+
await saveLLMConfig(configPath, fullConfig);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
25
49
|
logger.info(`[LLMFactory] Creating LLM: ${name} (provider: ${provider}, model: ${config.model}, temp: ${temperature ?? 'default'})`);
|
|
26
50
|
let llm;
|
|
27
51
|
switch (provider) {
|
|
@@ -35,7 +59,7 @@ export class LLMFactory {
|
|
|
35
59
|
llm = this.createAnthropic(config, temperature);
|
|
36
60
|
break;
|
|
37
61
|
case 'local':
|
|
38
|
-
llm = this.
|
|
62
|
+
llm = this.createOpenAI(config, temperature, 'local');
|
|
39
63
|
break;
|
|
40
64
|
default:
|
|
41
65
|
throw new Error(`Unsupported provider: ${provider}`);
|
|
@@ -45,13 +69,25 @@ export class LLMFactory {
|
|
|
45
69
|
}
|
|
46
70
|
static createOpenAI(config, temperature, provider = 'openai') {
|
|
47
71
|
const apiKey = resolveApiKey(provider, config.apiKey);
|
|
72
|
+
let baseURL = config.baseUrl;
|
|
73
|
+
let supportsVision = true;
|
|
74
|
+
if (provider === 'local' && !baseURL) {
|
|
75
|
+
const engineName = config.engine ?? 'llama-cpp';
|
|
76
|
+
const engine = engineRegistry.getEngine(engineName);
|
|
77
|
+
baseURL = (engine?.getChatBaseUrl() ?? 'http://127.0.0.1:9990') + '/v1';
|
|
78
|
+
supportsVision = engine?.getChatStatus().supportsVision ?? false;
|
|
79
|
+
}
|
|
48
80
|
return new OpenAIChatModel({
|
|
49
81
|
modelName: config.model,
|
|
50
82
|
apiKey,
|
|
51
|
-
maxTokens: config.maxTokens,
|
|
83
|
+
maxTokens: config.maxTokens ?? (provider === 'local' ? 4096 : undefined),
|
|
52
84
|
streamUsage: true,
|
|
53
|
-
baseURL
|
|
85
|
+
baseURL,
|
|
54
86
|
provider: provider,
|
|
87
|
+
supportsVision,
|
|
88
|
+
...(provider === 'local' && config.reasoningBudget ? { reasoningBudget: config.reasoningBudget } : {}),
|
|
89
|
+
...(config.engine ? { engine: config.engine } : {}),
|
|
90
|
+
...(config.contextSize ? { contextSize: config.contextSize } : {}),
|
|
55
91
|
...(temperature !== undefined ? { temperature } : {}),
|
|
56
92
|
});
|
|
57
93
|
}
|
|
@@ -75,9 +111,6 @@ export class LLMFactory {
|
|
|
75
111
|
...(temperature !== undefined ? { temperature } : {}),
|
|
76
112
|
});
|
|
77
113
|
}
|
|
78
|
-
static createLocal(config, temperature, provider = 'local') {
|
|
79
|
-
return this.createOpenAI(config, temperature, provider);
|
|
80
|
-
}
|
|
81
114
|
static getCacheKey(name, temperature) {
|
|
82
115
|
return `${name}-${temperature}`;
|
|
83
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-factory.js","sourceRoot":"","sources":["../../../lib/llm/llm-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAoB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-factory.js","sourceRoot":"","sources":["../../../lib/llm/llm-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ interface OpenAIChatModelOptions {
|
|
|
7
7
|
baseURL?: string;
|
|
8
8
|
streamUsage?: boolean;
|
|
9
9
|
provider?: 'openai' | 'local';
|
|
10
|
+
supportsVision?: boolean;
|
|
11
|
+
reasoningBudget?: number;
|
|
12
|
+
engine?: string;
|
|
13
|
+
contextSize?: number;
|
|
10
14
|
}
|
|
11
15
|
export declare class OpenAIChatModel implements ChatModel {
|
|
12
16
|
private client;
|
|
@@ -15,10 +19,14 @@ export declare class OpenAIChatModel implements ChatModel {
|
|
|
15
19
|
private maxTokens?;
|
|
16
20
|
private streamUsage;
|
|
17
21
|
private provider;
|
|
22
|
+
private supportsVision;
|
|
18
23
|
private isReasoningModel;
|
|
24
|
+
private reasoningBudget;
|
|
19
25
|
private boundTools?;
|
|
20
26
|
private cachedProviderTools?;
|
|
21
27
|
private structuredSchema?;
|
|
28
|
+
private engine?;
|
|
29
|
+
private contextSize?;
|
|
22
30
|
constructor(options: OpenAIChatModelOptions);
|
|
23
31
|
/**
|
|
24
32
|
* OpenAI tool messages only accept string or text-part arrays — no image_url.
|
|
@@ -28,6 +36,8 @@ export declare class OpenAIChatModel implements ChatModel {
|
|
|
28
36
|
private toOpenAIMessages;
|
|
29
37
|
private toOpenAITools;
|
|
30
38
|
private parseToolCalls;
|
|
39
|
+
/** Build Ollama-specific options (num_ctx) when engine is ollama */
|
|
40
|
+
private ollamaOptions;
|
|
31
41
|
invoke(messages: BaseMessage[]): Promise<ChatModelResponse>;
|
|
32
42
|
stream(messages: BaseMessage[], options?: {
|
|
33
43
|
signal?: AbortSignal;
|