@nodetool-ai/runtime 0.7.0-rc.11
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/bridge-protocol.d.ts +39 -0
- package/dist/bridge-protocol.d.ts.map +1 -0
- package/dist/bridge-protocol.js +39 -0
- package/dist/bridge-protocol.js.map +1 -0
- package/dist/comfy-executor.d.ts +41 -0
- package/dist/comfy-executor.d.ts.map +1 -0
- package/dist/comfy-executor.js +305 -0
- package/dist/comfy-executor.js.map +1 -0
- package/dist/context-packer.d.ts +22 -0
- package/dist/context-packer.d.ts.map +1 -0
- package/dist/context-packer.js +66 -0
- package/dist/context-packer.js.map +1 -0
- package/dist/context.d.ts +405 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +1455 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/node-executor.d.ts +53 -0
- package/dist/node-executor.d.ts.map +1 -0
- package/dist/node-executor.js +9 -0
- package/dist/node-executor.js.map +1 -0
- package/dist/providers/aki-manifest.json +34 -0
- package/dist/providers/aki-provider.d.ts +65 -0
- package/dist/providers/aki-provider.d.ts.map +1 -0
- package/dist/providers/aki-provider.js +517 -0
- package/dist/providers/aki-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +55 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +563 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +194 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +515 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +20 -0
- package/dist/providers/cerebras-provider.d.ts.map +1 -0
- package/dist/providers/cerebras-provider.js +52 -0
- package/dist/providers/cerebras-provider.js.map +1 -0
- package/dist/providers/claude-agent-provider.d.ts +107 -0
- package/dist/providers/claude-agent-provider.d.ts.map +1 -0
- package/dist/providers/claude-agent-provider.js +586 -0
- package/dist/providers/claude-agent-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +36 -0
- package/dist/providers/cohere-provider.d.ts.map +1 -0
- package/dist/providers/cohere-provider.js +116 -0
- package/dist/providers/cohere-provider.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +109 -0
- package/dist/providers/cost-calculator.d.ts.map +1 -0
- package/dist/providers/cost-calculator.js +475 -0
- package/dist/providers/cost-calculator.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +25 -0
- package/dist/providers/deepseek-provider.d.ts.map +1 -0
- package/dist/providers/deepseek-provider.js +58 -0
- package/dist/providers/deepseek-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +52 -0
- package/dist/providers/fake-provider.d.ts.map +1 -0
- package/dist/providers/fake-provider.js +107 -0
- package/dist/providers/fake-provider.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +32 -0
- package/dist/providers/fal-provider.d.ts.map +1 -0
- package/dist/providers/fal-provider.js +445 -0
- package/dist/providers/fal-provider.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +109 -0
- package/dist/providers/gemini-provider.d.ts.map +1 -0
- package/dist/providers/gemini-provider.js +943 -0
- package/dist/providers/gemini-provider.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +20 -0
- package/dist/providers/groq-provider.d.ts.map +1 -0
- package/dist/providers/groq-provider.js +52 -0
- package/dist/providers/groq-provider.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +59 -0
- package/dist/providers/huggingface-provider.d.ts.map +1 -0
- package/dist/providers/huggingface-provider.js +305 -0
- package/dist/providers/huggingface-provider.js.map +1 -0
- package/dist/providers/index.d.ts +69 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +137 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/jina-provider.d.ts +37 -0
- package/dist/providers/jina-provider.d.ts.map +1 -0
- package/dist/providers/jina-provider.js +118 -0
- package/dist/providers/jina-provider.js.map +1 -0
- package/dist/providers/kie-provider.d.ts +19 -0
- package/dist/providers/kie-provider.d.ts.map +1 -0
- package/dist/providers/kie-provider.js +118 -0
- package/dist/providers/kie-provider.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +49 -0
- package/dist/providers/llama-provider.d.ts.map +1 -0
- package/dist/providers/llama-provider.js +381 -0
- package/dist/providers/llama-provider.js.map +1 -0
- package/dist/providers/lmstudio-provider.d.ts +22 -0
- package/dist/providers/lmstudio-provider.d.ts.map +1 -0
- package/dist/providers/lmstudio-provider.js +63 -0
- package/dist/providers/lmstudio-provider.js.map +1 -0
- package/dist/providers/manifest-models.d.ts +12 -0
- package/dist/providers/manifest-models.d.ts.map +1 -0
- package/dist/providers/manifest-models.js +96 -0
- package/dist/providers/manifest-models.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +53 -0
- package/dist/providers/meshy-provider.d.ts.map +1 -0
- package/dist/providers/meshy-provider.js +230 -0
- package/dist/providers/meshy-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +66 -0
- package/dist/providers/minimax-provider.d.ts.map +1 -0
- package/dist/providers/minimax-provider.js +531 -0
- package/dist/providers/minimax-provider.js.map +1 -0
- package/dist/providers/mistral-provider.d.ts +26 -0
- package/dist/providers/mistral-provider.d.ts.map +1 -0
- package/dist/providers/mistral-provider.js +74 -0
- package/dist/providers/mistral-provider.js.map +1 -0
- package/dist/providers/moonshot-provider.d.ts +24 -0
- package/dist/providers/moonshot-provider.d.ts.map +1 -0
- package/dist/providers/moonshot-provider.js +43 -0
- package/dist/providers/moonshot-provider.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +71 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -0
- package/dist/providers/ollama-provider.js +480 -0
- package/dist/providers/ollama-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +103 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +917 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/providers/openrouter-provider.d.ts +49 -0
- package/dist/providers/openrouter-provider.d.ts.map +1 -0
- package/dist/providers/openrouter-provider.js +147 -0
- package/dist/providers/openrouter-provider.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +24 -0
- package/dist/providers/provider-registry.d.ts.map +1 -0
- package/dist/providers/provider-registry.js +124 -0
- package/dist/providers/provider-registry.js.map +1 -0
- package/dist/providers/python-provider.d.ts +75 -0
- package/dist/providers/python-provider.d.ts.map +1 -0
- package/dist/providers/python-provider.js +157 -0
- package/dist/providers/python-provider.js.map +1 -0
- package/dist/providers/replicate-provider.d.ts +73 -0
- package/dist/providers/replicate-provider.d.ts.map +1 -0
- package/dist/providers/replicate-provider.js +484 -0
- package/dist/providers/replicate-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +41 -0
- package/dist/providers/rodin-provider.d.ts.map +1 -0
- package/dist/providers/rodin-provider.js +236 -0
- package/dist/providers/rodin-provider.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +141 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -0
- package/dist/providers/scripted-provider.js +246 -0
- package/dist/providers/scripted-provider.js.map +1 -0
- package/dist/providers/together-provider.d.ts +20 -0
- package/dist/providers/together-provider.d.ts.map +1 -0
- package/dist/providers/together-provider.js +56 -0
- package/dist/providers/together-provider.js.map +1 -0
- package/dist/providers/types.d.ts +202 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +22 -0
- package/dist/providers/vllm-provider.d.ts.map +1 -0
- package/dist/providers/vllm-provider.js +66 -0
- package/dist/providers/vllm-provider.js.map +1 -0
- package/dist/providers/voyage-provider.d.ts +37 -0
- package/dist/providers/voyage-provider.d.ts.map +1 -0
- package/dist/providers/voyage-provider.js +124 -0
- package/dist/providers/voyage-provider.js.map +1 -0
- package/dist/providers/xai-provider.d.ts +24 -0
- package/dist/providers/xai-provider.d.ts.map +1 -0
- package/dist/providers/xai-provider.js +57 -0
- package/dist/providers/xai-provider.js.map +1 -0
- package/dist/python-bridge-types.d.ts +70 -0
- package/dist/python-bridge-types.d.ts.map +1 -0
- package/dist/python-bridge-types.js +2 -0
- package/dist/python-bridge-types.js.map +1 -0
- package/dist/python-node-executor.d.ts +20 -0
- package/dist/python-node-executor.d.ts.map +1 -0
- package/dist/python-node-executor.js +219 -0
- package/dist/python-node-executor.js.map +1 -0
- package/dist/python-stdio-bridge.d.ts +67 -0
- package/dist/python-stdio-bridge.d.ts.map +1 -0
- package/dist/python-stdio-bridge.js +704 -0
- package/dist/python-stdio-bridge.js.map +1 -0
- package/dist/recommended-models.d.ts +17 -0
- package/dist/recommended-models.d.ts.map +1 -0
- package/dist/recommended-models.js +139 -0
- package/dist/recommended-models.js.map +1 -0
- package/dist/telemetry.d.ts +61 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +128 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/trace-exporters.d.ts +72 -0
- package/dist/trace-exporters.d.ts.map +1 -0
- package/dist/trace-exporters.js +216 -0
- package/dist/trace-exporters.js.map +1 -0
- package/dist/tracing-helpers.d.ts +99 -0
- package/dist/tracing-helpers.d.ts.map +1 -0
- package/dist/tracing-helpers.js +217 -0
- package/dist/tracing-helpers.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
import { AnthropicProvider } from "./anthropic-provider.js";
|
|
3
|
+
import type { LanguageModel } from "./types.js";
|
|
4
|
+
interface MoonshotProviderOptions {
|
|
5
|
+
client?: Anthropic;
|
|
6
|
+
clientFactory?: (apiKey: string) => Anthropic;
|
|
7
|
+
fetchFn?: typeof fetch;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Moonshot AI (Kimi) provider. Uses the Anthropic SDK against Moonshot's
|
|
11
|
+
* Claude-compatible endpoint exposed to Kimi coding plan subscribers at
|
|
12
|
+
* https://api.kimi.com/coding.
|
|
13
|
+
*/
|
|
14
|
+
export declare class MoonshotProvider extends AnthropicProvider {
|
|
15
|
+
static requiredSecrets(): string[];
|
|
16
|
+
constructor(secrets: {
|
|
17
|
+
KIMI_API_KEY?: string;
|
|
18
|
+
}, options?: MoonshotProviderOptions);
|
|
19
|
+
getContainerEnv(): Record<string, string>;
|
|
20
|
+
hasToolSupport(_model: string): Promise<boolean>;
|
|
21
|
+
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=moonshot-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moonshot-provider.d.ts","sourceRoot":"","sources":["../../src/providers/moonshot-provider.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;IAC9C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,iBAAiB;WACrC,eAAe,IAAI,MAAM,EAAE;gBAKzC,OAAO,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,EAClC,OAAO,GAAE,uBAA4B;IAyB9B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOnC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAItE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
import { AnthropicProvider } from "./anthropic-provider.js";
|
|
3
|
+
const MOONSHOT_BASE_URL = "https://api.kimi.com/coding";
|
|
4
|
+
/**
|
|
5
|
+
* Moonshot AI (Kimi) provider. Uses the Anthropic SDK against Moonshot's
|
|
6
|
+
* Claude-compatible endpoint exposed to Kimi coding plan subscribers at
|
|
7
|
+
* https://api.kimi.com/coding.
|
|
8
|
+
*/
|
|
9
|
+
export class MoonshotProvider extends AnthropicProvider {
|
|
10
|
+
static requiredSecrets() {
|
|
11
|
+
return ["KIMI_API_KEY"];
|
|
12
|
+
}
|
|
13
|
+
constructor(secrets, options = {}) {
|
|
14
|
+
const apiKey = secrets.KIMI_API_KEY;
|
|
15
|
+
if (!apiKey || !apiKey.trim()) {
|
|
16
|
+
throw new Error("KIMI_API_KEY is not configured");
|
|
17
|
+
}
|
|
18
|
+
super({ ANTHROPIC_API_KEY: apiKey }, {
|
|
19
|
+
client: options.client,
|
|
20
|
+
clientFactory: options.clientFactory ??
|
|
21
|
+
((key) => new Anthropic({
|
|
22
|
+
apiKey: key,
|
|
23
|
+
baseURL: MOONSHOT_BASE_URL
|
|
24
|
+
})),
|
|
25
|
+
fetchFn: options.fetchFn
|
|
26
|
+
});
|
|
27
|
+
this.provider = "moonshot";
|
|
28
|
+
}
|
|
29
|
+
getContainerEnv() {
|
|
30
|
+
return {
|
|
31
|
+
KIMI_API_KEY: this.apiKey,
|
|
32
|
+
ANTHROPIC_BASE_URL: MOONSHOT_BASE_URL
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async hasToolSupport(_model) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
async getAvailableLanguageModels() {
|
|
39
|
+
const knownModels = ["kimi-k2.5", "kimi-k2.6"];
|
|
40
|
+
return knownModels.map((id) => ({ id, name: id, provider: "moonshot" }));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=moonshot-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moonshot-provider.js","sourceRoot":"","sources":["../../src/providers/moonshot-provider.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AAQxD;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IACrD,MAAM,CAAU,eAAe;QAC7B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC;IAED,YACE,OAAkC,EAClC,UAAmC,EAAE;QAErC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QACpC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,CACH,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAC7B;YACE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EACX,OAAO,CAAC,aAAa;gBACrB,CAAC,CAAC,GAAG,EAAE,EAAE,CACP,IAAI,SAAS,CAAC;oBACZ,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,iBAAiB;iBAC3B,CAAC,CAAC;YACP,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CACF,CAAC;QAED,IAA6B,CAAC,QAAQ,GAAG,UAAU,CAAC;IACvD,CAAC;IAEQ,eAAe;QACtB,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,kBAAkB,EAAE,iBAAiB;SACtC,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,MAAc;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/C,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { BaseProvider } from "./base-provider.js";
|
|
2
|
+
import type { EmbeddingModel, LanguageModel, Message, ProviderStreamItem, ProviderTool } from "./types.js";
|
|
3
|
+
interface OllamaProviderOptions {
|
|
4
|
+
fetchFn?: typeof fetch;
|
|
5
|
+
}
|
|
6
|
+
export declare class OllamaProvider extends BaseProvider {
|
|
7
|
+
static requiredSecrets(): string[];
|
|
8
|
+
readonly apiUrl: string;
|
|
9
|
+
private _fetch;
|
|
10
|
+
constructor(secrets: {
|
|
11
|
+
OLLAMA_API_URL?: string;
|
|
12
|
+
}, options?: OllamaProviderOptions);
|
|
13
|
+
getContainerEnv(): Record<string, string>;
|
|
14
|
+
private _modelInfoCache;
|
|
15
|
+
/**
|
|
16
|
+
* Check if a model supports native tool calling by querying /api/show.
|
|
17
|
+
* Falls back to true if capabilities can't be determined.
|
|
18
|
+
*/
|
|
19
|
+
hasToolSupport(model: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Format tools as text descriptions for emulation injection into the system prompt.
|
|
22
|
+
*/
|
|
23
|
+
private _formatToolsForEmulation;
|
|
24
|
+
/**
|
|
25
|
+
* Parse emulated function calls from model output.
|
|
26
|
+
* Returns [toolCalls, cleanedContent].
|
|
27
|
+
*/
|
|
28
|
+
private _parseEmulatedToolCalls;
|
|
29
|
+
private imageToBase64;
|
|
30
|
+
convertMessage(message: Message): Promise<Record<string, unknown>>;
|
|
31
|
+
formatTools(tools: ProviderTool[]): Array<Record<string, unknown>>;
|
|
32
|
+
private postJson;
|
|
33
|
+
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
34
|
+
getAvailableEmbeddingModels(): Promise<EmbeddingModel[]>;
|
|
35
|
+
private toToolCalls;
|
|
36
|
+
private buildChatRequest;
|
|
37
|
+
generateMessage(args: {
|
|
38
|
+
messages: Message[];
|
|
39
|
+
model: string;
|
|
40
|
+
tools?: ProviderTool[];
|
|
41
|
+
maxTokens?: number;
|
|
42
|
+
temperature?: number;
|
|
43
|
+
topP?: number;
|
|
44
|
+
presencePenalty?: number;
|
|
45
|
+
frequencyPenalty?: number;
|
|
46
|
+
}): Promise<Message>;
|
|
47
|
+
/**
|
|
48
|
+
* Inject tool emulation instructions into the message list.
|
|
49
|
+
* Prepends/appends tool descriptions to system message and converts tool messages to user messages.
|
|
50
|
+
*/
|
|
51
|
+
private _injectToolEmulationPrompt;
|
|
52
|
+
generateMessages(args: {
|
|
53
|
+
messages: Message[];
|
|
54
|
+
model: string;
|
|
55
|
+
tools?: ProviderTool[];
|
|
56
|
+
maxTokens?: number;
|
|
57
|
+
temperature?: number;
|
|
58
|
+
topP?: number;
|
|
59
|
+
presencePenalty?: number;
|
|
60
|
+
frequencyPenalty?: number;
|
|
61
|
+
audio?: Record<string, unknown>;
|
|
62
|
+
}): AsyncGenerator<ProviderStreamItem>;
|
|
63
|
+
generateEmbedding(args: {
|
|
64
|
+
text: string | string[];
|
|
65
|
+
model: string;
|
|
66
|
+
dimensions?: number;
|
|
67
|
+
}): Promise<number[][]>;
|
|
68
|
+
isContextLengthError(error: unknown): boolean;
|
|
69
|
+
}
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=ollama-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama-provider.d.ts","sourceRoot":"","sources":["../../src/providers/ollama-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,OAAO,EAIP,kBAAkB,EAClB,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AA4DD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,MAAM,CAAC,eAAe,IAAI,MAAM,EAAE;IAIlC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,MAAM,CAAe;gBAG3B,OAAO,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EACpC,OAAO,GAAE,qBAA0B;IAWrC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIzC,OAAO,CAAC,eAAe,CAA8C;IAErE;;;OAGG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmCrD;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;YAuCjB,aAAa;IA8BrB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA+DxE,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAWpD,QAAQ;IAehB,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAiBtD,2BAA2B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAU9D,OAAO,CAAC,WAAW;YAgBL,gBAAgB;IA0BxB,eAAe,CAAC,IAAI,EAAE;QAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO,CAAC,OAAO,CAAC;IA6CpB;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAuC3B,gBAAgB,CAAC,IAAI,EAAE;QAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,GAAG,cAAc,CAAC,kBAAkB,CAAC;IA+FhC,iBAAiB,CAAC,IAAI,EAAE;QAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAkBvB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAU9C"}
|
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
2
|
+
import { BaseProvider } from "./base-provider.js";
|
|
3
|
+
const log = createLogger("nodetool.runtime.providers.ollama");
|
|
4
|
+
function parseDataUri(uri) {
|
|
5
|
+
const idx = uri.indexOf(",");
|
|
6
|
+
if (idx < 0) {
|
|
7
|
+
throw new Error("Invalid data URI");
|
|
8
|
+
}
|
|
9
|
+
const header = uri.slice(5, idx);
|
|
10
|
+
const payload = uri.slice(idx + 1);
|
|
11
|
+
const isBase64 = header.includes(";base64");
|
|
12
|
+
const mime = header.split(";")[0] || "application/octet-stream";
|
|
13
|
+
if (isBase64) {
|
|
14
|
+
return { mime, base64: payload };
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
mime,
|
|
18
|
+
base64: Buffer.from(decodeURIComponent(payload), "utf8").toString("base64")
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function normalizeToolArgs(raw) {
|
|
22
|
+
if (!raw)
|
|
23
|
+
return {};
|
|
24
|
+
if (typeof raw === "string") {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(raw);
|
|
27
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
28
|
+
return parsed;
|
|
29
|
+
}
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (typeof raw === "object" && !Array.isArray(raw)) {
|
|
37
|
+
return raw;
|
|
38
|
+
}
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
function asTextParts(content) {
|
|
42
|
+
return content
|
|
43
|
+
.filter((part) => part.type === "text")
|
|
44
|
+
.map((part) => part.text)
|
|
45
|
+
.join("\n");
|
|
46
|
+
}
|
|
47
|
+
export class OllamaProvider extends BaseProvider {
|
|
48
|
+
static requiredSecrets() {
|
|
49
|
+
return ["OLLAMA_API_URL"];
|
|
50
|
+
}
|
|
51
|
+
apiUrl;
|
|
52
|
+
_fetch;
|
|
53
|
+
constructor(secrets, options = {}) {
|
|
54
|
+
super("ollama");
|
|
55
|
+
const apiUrl = secrets.OLLAMA_API_URL ?? process.env.OLLAMA_API_URL;
|
|
56
|
+
if (!apiUrl || !apiUrl.trim()) {
|
|
57
|
+
throw new Error("OLLAMA_API_URL is required");
|
|
58
|
+
}
|
|
59
|
+
this.apiUrl = apiUrl.replace(/\/+$/, "");
|
|
60
|
+
this._fetch = options.fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
61
|
+
}
|
|
62
|
+
getContainerEnv() {
|
|
63
|
+
return { OLLAMA_API_URL: this.apiUrl };
|
|
64
|
+
}
|
|
65
|
+
_modelInfoCache = new Map();
|
|
66
|
+
/**
|
|
67
|
+
* Check if a model supports native tool calling by querying /api/show.
|
|
68
|
+
* Falls back to true if capabilities can't be determined.
|
|
69
|
+
*/
|
|
70
|
+
async hasToolSupport(model) {
|
|
71
|
+
try {
|
|
72
|
+
let info = this._modelInfoCache.get(model);
|
|
73
|
+
if (!info) {
|
|
74
|
+
const response = await this._fetch(`${this.apiUrl}/api/show`, {
|
|
75
|
+
method: "POST",
|
|
76
|
+
headers: { "Content-Type": "application/json" },
|
|
77
|
+
body: JSON.stringify({ model })
|
|
78
|
+
});
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
log.warn("Failed to fetch model info, assuming tool support", {
|
|
81
|
+
model,
|
|
82
|
+
status: response.status
|
|
83
|
+
});
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
info = (await response.json());
|
|
87
|
+
this._modelInfoCache.set(model, info);
|
|
88
|
+
}
|
|
89
|
+
const capabilities = info.capabilities;
|
|
90
|
+
if (Array.isArray(capabilities)) {
|
|
91
|
+
return capabilities.includes("tools");
|
|
92
|
+
}
|
|
93
|
+
// No capabilities field — assume supported for backward compatibility
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
log.warn("Error checking tool support, defaulting to true", {
|
|
98
|
+
model,
|
|
99
|
+
error: String(err)
|
|
100
|
+
});
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Format tools as text descriptions for emulation injection into the system prompt.
|
|
106
|
+
*/
|
|
107
|
+
_formatToolsForEmulation(tools) {
|
|
108
|
+
const lines = [];
|
|
109
|
+
for (const tool of tools) {
|
|
110
|
+
const params = tool.inputSchema?.properties
|
|
111
|
+
? Object.entries(tool.inputSchema.properties)
|
|
112
|
+
.map(([name, prop]) => `${name}: ${prop.type ?? "any"}`)
|
|
113
|
+
.join(", ")
|
|
114
|
+
: "";
|
|
115
|
+
lines.push(`- ${tool.name}(${params}): ${tool.description ?? ""}`);
|
|
116
|
+
}
|
|
117
|
+
return lines.join("\n");
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Parse emulated function calls from model output.
|
|
121
|
+
* Returns [toolCalls, cleanedContent].
|
|
122
|
+
*/
|
|
123
|
+
_parseEmulatedToolCalls(content, tools) {
|
|
124
|
+
const toolNames = new Set(tools.map((t) => t.name));
|
|
125
|
+
const calls = [];
|
|
126
|
+
let cleaned = content;
|
|
127
|
+
// Match patterns like: function_name(key='value', key2=123)
|
|
128
|
+
// or [func_name(key=value)]
|
|
129
|
+
const funcPattern = /\[?\b(\w+)\(([^)]*)\)\]?/g;
|
|
130
|
+
let match;
|
|
131
|
+
while ((match = funcPattern.exec(content)) !== null) {
|
|
132
|
+
const [fullMatch, name, argsStr] = match;
|
|
133
|
+
if (!toolNames.has(name))
|
|
134
|
+
continue;
|
|
135
|
+
// Parse key=value pairs
|
|
136
|
+
const args = {};
|
|
137
|
+
const argPattern = /(\w+)\s*=\s*(?:'([^']*)'|"([^"]*)"|(\S+))/g;
|
|
138
|
+
let argMatch;
|
|
139
|
+
while ((argMatch = argPattern.exec(argsStr)) !== null) {
|
|
140
|
+
const key = argMatch[1];
|
|
141
|
+
const value = argMatch[2] ?? argMatch[3] ?? argMatch[4];
|
|
142
|
+
// Try to parse as number or boolean
|
|
143
|
+
if (value === "true")
|
|
144
|
+
args[key] = true;
|
|
145
|
+
else if (value === "false")
|
|
146
|
+
args[key] = false;
|
|
147
|
+
else if (!isNaN(Number(value)) && value !== "")
|
|
148
|
+
args[key] = Number(value);
|
|
149
|
+
else
|
|
150
|
+
args[key] = value;
|
|
151
|
+
}
|
|
152
|
+
calls.push({ id: `emulated-${name}-${Date.now()}`, name, args });
|
|
153
|
+
cleaned = cleaned.replace(fullMatch, "").trim();
|
|
154
|
+
}
|
|
155
|
+
return [calls, cleaned];
|
|
156
|
+
}
|
|
157
|
+
async imageToBase64(image) {
|
|
158
|
+
if (typeof image.data === "string" && image.data.startsWith("data:")) {
|
|
159
|
+
return parseDataUri(image.data).base64;
|
|
160
|
+
}
|
|
161
|
+
if (typeof image.uri === "string" && image.uri.startsWith("data:")) {
|
|
162
|
+
return parseDataUri(image.uri).base64;
|
|
163
|
+
}
|
|
164
|
+
if (typeof image.data === "string") {
|
|
165
|
+
return image.data;
|
|
166
|
+
}
|
|
167
|
+
if (image.data instanceof Uint8Array) {
|
|
168
|
+
return Buffer.from(image.data).toString("base64");
|
|
169
|
+
}
|
|
170
|
+
if (image.uri) {
|
|
171
|
+
const resolved = await this.resolveUri(image.uri);
|
|
172
|
+
if (resolved.startsWith("data:")) {
|
|
173
|
+
return parseDataUri(resolved).base64;
|
|
174
|
+
}
|
|
175
|
+
const response = await this._fetch(resolved);
|
|
176
|
+
if (!response.ok) {
|
|
177
|
+
throw new Error(`Failed to fetch image URI: ${response.status}`);
|
|
178
|
+
}
|
|
179
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
180
|
+
return Buffer.from(bytes).toString("base64");
|
|
181
|
+
}
|
|
182
|
+
throw new Error("Invalid image payload: expected uri or data");
|
|
183
|
+
}
|
|
184
|
+
async convertMessage(message) {
|
|
185
|
+
if (message.role === "tool") {
|
|
186
|
+
const content = typeof message.content === "string"
|
|
187
|
+
? message.content
|
|
188
|
+
: JSON.stringify(message.content ?? null);
|
|
189
|
+
return { role: "tool", content };
|
|
190
|
+
}
|
|
191
|
+
if (message.role === "assistant") {
|
|
192
|
+
const out = {
|
|
193
|
+
role: "assistant",
|
|
194
|
+
content: typeof message.content === "string" ? message.content : ""
|
|
195
|
+
};
|
|
196
|
+
const toolCalls = message.toolCalls ?? [];
|
|
197
|
+
if (toolCalls.length > 0) {
|
|
198
|
+
out.tool_calls = toolCalls.map((tc) => ({
|
|
199
|
+
function: {
|
|
200
|
+
name: tc.name,
|
|
201
|
+
arguments: tc.args
|
|
202
|
+
}
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
205
|
+
return out;
|
|
206
|
+
}
|
|
207
|
+
if (message.role === "system") {
|
|
208
|
+
if (typeof message.content === "string") {
|
|
209
|
+
return { role: "system", content: message.content };
|
|
210
|
+
}
|
|
211
|
+
if (Array.isArray(message.content)) {
|
|
212
|
+
return { role: "system", content: asTextParts(message.content) };
|
|
213
|
+
}
|
|
214
|
+
return { role: "system", content: "" };
|
|
215
|
+
}
|
|
216
|
+
if (message.role !== "user") {
|
|
217
|
+
throw new Error(`Unsupported message role: ${message.role}`);
|
|
218
|
+
}
|
|
219
|
+
if (typeof message.content === "string") {
|
|
220
|
+
return { role: "user", content: message.content };
|
|
221
|
+
}
|
|
222
|
+
const parts = message.content ?? [];
|
|
223
|
+
const text = asTextParts(parts);
|
|
224
|
+
const images = await Promise.all(parts
|
|
225
|
+
.filter((part) => part.type === "image_url")
|
|
226
|
+
.map((part) => this.imageToBase64(part.image)));
|
|
227
|
+
const out = {
|
|
228
|
+
role: "user",
|
|
229
|
+
content: text
|
|
230
|
+
};
|
|
231
|
+
if (images.length > 0) {
|
|
232
|
+
out.images = images;
|
|
233
|
+
}
|
|
234
|
+
return out;
|
|
235
|
+
}
|
|
236
|
+
formatTools(tools) {
|
|
237
|
+
return tools.map((tool) => ({
|
|
238
|
+
type: "function",
|
|
239
|
+
function: {
|
|
240
|
+
name: tool.name,
|
|
241
|
+
description: tool.description ?? "",
|
|
242
|
+
parameters: tool.inputSchema ?? { type: "object", properties: {} }
|
|
243
|
+
}
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
246
|
+
async postJson(path, body) {
|
|
247
|
+
const response = await this._fetch(`${this.apiUrl}${path}`, {
|
|
248
|
+
method: "POST",
|
|
249
|
+
headers: { "content-type": "application/json" },
|
|
250
|
+
body: JSON.stringify(body)
|
|
251
|
+
});
|
|
252
|
+
if (!response.ok) {
|
|
253
|
+
throw new Error(`Ollama API request failed (${response.status})`);
|
|
254
|
+
}
|
|
255
|
+
return (await response.json());
|
|
256
|
+
}
|
|
257
|
+
async getAvailableLanguageModels() {
|
|
258
|
+
const response = await this._fetch(`${this.apiUrl}/api/tags`);
|
|
259
|
+
if (!response.ok)
|
|
260
|
+
return [];
|
|
261
|
+
const payload = (await response.json());
|
|
262
|
+
const rows = payload.models ?? [];
|
|
263
|
+
return rows
|
|
264
|
+
.map((m) => m.model ?? m.name)
|
|
265
|
+
.filter((id) => typeof id === "string" && id.length > 0)
|
|
266
|
+
.map((id) => ({
|
|
267
|
+
id,
|
|
268
|
+
name: id,
|
|
269
|
+
provider: "ollama"
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
272
|
+
async getAvailableEmbeddingModels() {
|
|
273
|
+
const models = await this.getAvailableLanguageModels();
|
|
274
|
+
return models.map((m) => ({
|
|
275
|
+
id: m.id,
|
|
276
|
+
name: m.name,
|
|
277
|
+
provider: "ollama",
|
|
278
|
+
dimensions: 0
|
|
279
|
+
}));
|
|
280
|
+
}
|
|
281
|
+
toToolCalls(toolCalls) {
|
|
282
|
+
if (!Array.isArray(toolCalls))
|
|
283
|
+
return [];
|
|
284
|
+
return toolCalls
|
|
285
|
+
.map((tc, idx) => {
|
|
286
|
+
const fn = tc.function ?? {};
|
|
287
|
+
const name = typeof fn.name === "string" ? fn.name : "";
|
|
288
|
+
if (!name)
|
|
289
|
+
return null;
|
|
290
|
+
return {
|
|
291
|
+
id: `tool_${idx + 1}`,
|
|
292
|
+
name,
|
|
293
|
+
args: normalizeToolArgs(fn.arguments)
|
|
294
|
+
};
|
|
295
|
+
})
|
|
296
|
+
.filter((tc) => tc !== null);
|
|
297
|
+
}
|
|
298
|
+
async buildChatRequest(args) {
|
|
299
|
+
const request = {
|
|
300
|
+
model: args.model,
|
|
301
|
+
messages: await Promise.all(args.messages.map((m) => this.convertMessage(m))),
|
|
302
|
+
options: {
|
|
303
|
+
num_predict: args.maxTokens ?? 8192
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
if ((args.tools ?? []).length > 0 &&
|
|
307
|
+
(await this.hasToolSupport(args.model))) {
|
|
308
|
+
request.tools = this.formatTools(args.tools ?? []);
|
|
309
|
+
}
|
|
310
|
+
return request;
|
|
311
|
+
}
|
|
312
|
+
async generateMessage(args) {
|
|
313
|
+
const tools = args.tools ?? [];
|
|
314
|
+
const useToolEmulation = tools.length > 0 && !(await this.hasToolSupport(args.model));
|
|
315
|
+
// For emulation, inject tool descriptions into messages and strip tools from request
|
|
316
|
+
let messages = args.messages;
|
|
317
|
+
let requestTools = args.tools;
|
|
318
|
+
if (useToolEmulation) {
|
|
319
|
+
requestTools = undefined;
|
|
320
|
+
messages = this._injectToolEmulationPrompt(messages, tools);
|
|
321
|
+
}
|
|
322
|
+
const request = await this.buildChatRequest({
|
|
323
|
+
messages,
|
|
324
|
+
model: args.model,
|
|
325
|
+
tools: requestTools,
|
|
326
|
+
maxTokens: args.maxTokens
|
|
327
|
+
});
|
|
328
|
+
request.stream = false;
|
|
329
|
+
log.debug("Ollama request", { model: args.model });
|
|
330
|
+
const response = await this.postJson("/api/chat", request);
|
|
331
|
+
const message = response.message ?? {};
|
|
332
|
+
const content = typeof message.content === "string" ? message.content : "";
|
|
333
|
+
let toolCalls;
|
|
334
|
+
if (useToolEmulation) {
|
|
335
|
+
const [emulatedCalls] = this._parseEmulatedToolCalls(content, tools);
|
|
336
|
+
toolCalls = emulatedCalls;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
toolCalls = this.toToolCalls(message.tool_calls);
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
role: "assistant",
|
|
343
|
+
content,
|
|
344
|
+
toolCalls
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Inject tool emulation instructions into the message list.
|
|
349
|
+
* Prepends/appends tool descriptions to system message and converts tool messages to user messages.
|
|
350
|
+
*/
|
|
351
|
+
_injectToolEmulationPrompt(messages, tools) {
|
|
352
|
+
const toolDescriptions = this._formatToolsForEmulation(tools);
|
|
353
|
+
const emulationSuffix = `\n\nYou have access to these functions. Call them by writing: function_name(param='value')\n\n${toolDescriptions}\n\nWhen you need a function, write ONLY the function call. After receiving a result, use it in your answer.`;
|
|
354
|
+
const result = [];
|
|
355
|
+
let systemFound = false;
|
|
356
|
+
for (const msg of messages) {
|
|
357
|
+
if (msg.role === "system" && !systemFound) {
|
|
358
|
+
systemFound = true;
|
|
359
|
+
const existingContent = typeof msg.content === "string" ? msg.content : "";
|
|
360
|
+
result.push({ ...msg, content: existingContent + emulationSuffix });
|
|
361
|
+
}
|
|
362
|
+
else if (msg.role === "tool") {
|
|
363
|
+
// Convert tool result to user message
|
|
364
|
+
const toolContent = typeof msg.content === "string"
|
|
365
|
+
? msg.content
|
|
366
|
+
: JSON.stringify(msg.content ?? null);
|
|
367
|
+
result.push({
|
|
368
|
+
role: "user",
|
|
369
|
+
content: `Function result: ${toolContent}`
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
result.push(msg);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// If no system message found, prepend one
|
|
377
|
+
if (!systemFound) {
|
|
378
|
+
result.unshift({ role: "system", content: emulationSuffix.trim() });
|
|
379
|
+
}
|
|
380
|
+
return result;
|
|
381
|
+
}
|
|
382
|
+
async *generateMessages(args) {
|
|
383
|
+
const tools = args.tools ?? [];
|
|
384
|
+
const useToolEmulation = tools.length > 0 && !(await this.hasToolSupport(args.model));
|
|
385
|
+
// For emulation, inject tool descriptions into messages and strip tools from request
|
|
386
|
+
let messages = args.messages;
|
|
387
|
+
let requestTools = args.tools;
|
|
388
|
+
if (useToolEmulation) {
|
|
389
|
+
requestTools = undefined;
|
|
390
|
+
messages = this._injectToolEmulationPrompt(messages, tools);
|
|
391
|
+
}
|
|
392
|
+
const request = await this.buildChatRequest({
|
|
393
|
+
messages,
|
|
394
|
+
model: args.model,
|
|
395
|
+
tools: requestTools,
|
|
396
|
+
maxTokens: args.maxTokens
|
|
397
|
+
});
|
|
398
|
+
request.stream = true;
|
|
399
|
+
log.debug("Ollama request", { model: args.model });
|
|
400
|
+
const response = await this._fetch(`${this.apiUrl}/api/chat`, {
|
|
401
|
+
method: "POST",
|
|
402
|
+
headers: { "content-type": "application/json" },
|
|
403
|
+
body: JSON.stringify(request)
|
|
404
|
+
});
|
|
405
|
+
if (!response.ok || !response.body) {
|
|
406
|
+
throw new Error(`Ollama API request failed (${response.status})`);
|
|
407
|
+
}
|
|
408
|
+
const decoder = new TextDecoder();
|
|
409
|
+
let buffer = "";
|
|
410
|
+
const reader = response.body.getReader();
|
|
411
|
+
let accumulatedText = "";
|
|
412
|
+
try {
|
|
413
|
+
while (true) {
|
|
414
|
+
const read = await reader.read();
|
|
415
|
+
if (read.done)
|
|
416
|
+
break;
|
|
417
|
+
buffer += decoder.decode(read.value, { stream: true });
|
|
418
|
+
while (true) {
|
|
419
|
+
const idx = buffer.indexOf("\n");
|
|
420
|
+
if (idx < 0)
|
|
421
|
+
break;
|
|
422
|
+
const line = buffer.slice(0, idx).trim();
|
|
423
|
+
buffer = buffer.slice(idx + 1);
|
|
424
|
+
if (!line)
|
|
425
|
+
continue;
|
|
426
|
+
const event = JSON.parse(line);
|
|
427
|
+
const message = event.message ?? {};
|
|
428
|
+
if (!useToolEmulation) {
|
|
429
|
+
for (const tc of this.toToolCalls(message.tool_calls)) {
|
|
430
|
+
yield tc;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
const content = typeof message.content === "string" ? message.content : "";
|
|
434
|
+
if (useToolEmulation) {
|
|
435
|
+
accumulatedText += content;
|
|
436
|
+
}
|
|
437
|
+
if (content.length > 0 || event.done) {
|
|
438
|
+
const chunk = {
|
|
439
|
+
type: "chunk",
|
|
440
|
+
content,
|
|
441
|
+
done: event.done ?? false
|
|
442
|
+
};
|
|
443
|
+
yield chunk;
|
|
444
|
+
}
|
|
445
|
+
// When done and using emulation, parse accumulated text for tool calls
|
|
446
|
+
if (event.done && useToolEmulation) {
|
|
447
|
+
const [emulatedCalls] = this._parseEmulatedToolCalls(accumulatedText, tools);
|
|
448
|
+
for (const tc of emulatedCalls) {
|
|
449
|
+
yield tc;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
finally {
|
|
456
|
+
reader.releaseLock();
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
async generateEmbedding(args) {
|
|
460
|
+
const values = Array.isArray(args.text) ? args.text : [args.text];
|
|
461
|
+
if (values.length === 0 ||
|
|
462
|
+
values.some((v) => typeof v !== "string" || v.length === 0)) {
|
|
463
|
+
throw new Error("text must not be empty");
|
|
464
|
+
}
|
|
465
|
+
const response = await this.postJson("/api/embed", {
|
|
466
|
+
model: args.model,
|
|
467
|
+
input: values
|
|
468
|
+
});
|
|
469
|
+
return response.embeddings ?? [];
|
|
470
|
+
}
|
|
471
|
+
isContextLengthError(error) {
|
|
472
|
+
const msg = String(error).toLowerCase();
|
|
473
|
+
return (msg.includes("context length") ||
|
|
474
|
+
msg.includes("context window") ||
|
|
475
|
+
msg.includes("token limit") ||
|
|
476
|
+
msg.includes("request too large") ||
|
|
477
|
+
msg.includes("413"));
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=ollama-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama-provider.js","sourceRoot":"","sources":["../../src/providers/ollama-provider.ts"],"names":[],"mappings":"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"}
|