@holokai/holo-provider-ollama 0.1.0
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/LICENSE +21 -0
- package/README.md +750 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +3 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +136 -0
- package/dist/manifest.js.map +1 -0
- package/dist/ollama.auditor.d.ts +22 -0
- package/dist/ollama.auditor.d.ts.map +1 -0
- package/dist/ollama.auditor.js +151 -0
- package/dist/ollama.auditor.js.map +1 -0
- package/dist/ollama.provider.d.ts +14 -0
- package/dist/ollama.provider.d.ts.map +1 -0
- package/dist/ollama.provider.js +88 -0
- package/dist/ollama.provider.js.map +1 -0
- package/dist/ollama.response.factory.d.ts +7 -0
- package/dist/ollama.response.factory.d.ts.map +1 -0
- package/dist/ollama.response.factory.js +9 -0
- package/dist/ollama.response.factory.js.map +1 -0
- package/dist/ollama.translator.d.ts +22 -0
- package/dist/ollama.translator.d.ts.map +1 -0
- package/dist/ollama.translator.js +90 -0
- package/dist/ollama.translator.js.map +1 -0
- package/dist/ollama.wire.adapter.d.ts +6 -0
- package/dist/ollama.wire.adapter.d.ts.map +1 -0
- package/dist/ollama.wire.adapter.js +11 -0
- package/dist/ollama.wire.adapter.js.map +1 -0
- package/dist/plugin.d.ts +19 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +57 -0
- package/dist/plugin.js.map +1 -0
- package/dist/translators/index.d.ts +9 -0
- package/dist/translators/index.d.ts.map +1 -0
- package/dist/translators/index.js +9 -0
- package/dist/translators/index.js.map +1 -0
- package/dist/translators/ollama.chat.request.translator.d.ts +20 -0
- package/dist/translators/ollama.chat.request.translator.d.ts.map +1 -0
- package/dist/translators/ollama.chat.request.translator.js +100 -0
- package/dist/translators/ollama.chat.request.translator.js.map +1 -0
- package/dist/translators/ollama.chat.response.translator.d.ts +22 -0
- package/dist/translators/ollama.chat.response.translator.d.ts.map +1 -0
- package/dist/translators/ollama.chat.response.translator.js +127 -0
- package/dist/translators/ollama.chat.response.translator.js.map +1 -0
- package/dist/translators/ollama.generate.request.translator.d.ts +13 -0
- package/dist/translators/ollama.generate.request.translator.d.ts.map +1 -0
- package/dist/translators/ollama.generate.request.translator.js +90 -0
- package/dist/translators/ollama.generate.request.translator.js.map +1 -0
- package/dist/translators/ollama.generate.response.translator.d.ts +20 -0
- package/dist/translators/ollama.generate.response.translator.d.ts.map +1 -0
- package/dist/translators/ollama.generate.response.translator.js +104 -0
- package/dist/translators/ollama.generate.response.translator.js.map +1 -0
- package/dist/translators/ollama.message.translators.d.ts +14 -0
- package/dist/translators/ollama.message.translators.d.ts.map +1 -0
- package/dist/translators/ollama.message.translators.js +117 -0
- package/dist/translators/ollama.message.translators.js.map +1 -0
- package/dist/translators/ollama.options.translators.d.ts +11 -0
- package/dist/translators/ollama.options.translators.d.ts.map +1 -0
- package/dist/translators/ollama.options.translators.js +37 -0
- package/dist/translators/ollama.options.translators.js.map +1 -0
- package/dist/translators/ollama.tool.translators.d.ts +13 -0
- package/dist/translators/ollama.tool.translators.d.ts.map +1 -0
- package/dist/translators/ollama.tool.translators.js +62 -0
- package/dist/translators/ollama.tool.translators.js.map +1 -0
- package/dist/translators/streaming/index.d.ts +5 -0
- package/dist/translators/streaming/index.d.ts.map +1 -0
- package/dist/translators/streaming/index.js +5 -0
- package/dist/translators/streaming/index.js.map +1 -0
- package/dist/translators/streaming/ollama.content.delta.translator.d.ts +14 -0
- package/dist/translators/streaming/ollama.content.delta.translator.d.ts.map +1 -0
- package/dist/translators/streaming/ollama.content.delta.translator.js +76 -0
- package/dist/translators/streaming/ollama.content.delta.translator.js.map +1 -0
- package/dist/translators/streaming/ollama.message.delta.translator.d.ts +15 -0
- package/dist/translators/streaming/ollama.message.delta.translator.d.ts.map +1 -0
- package/dist/translators/streaming/ollama.message.delta.translator.js +116 -0
- package/dist/translators/streaming/ollama.message.delta.translator.js.map +1 -0
- package/dist/translators/streaming/ollama.message.stop.translator.d.ts +16 -0
- package/dist/translators/streaming/ollama.message.stop.translator.d.ts.map +1 -0
- package/dist/translators/streaming/ollama.message.stop.translator.js +87 -0
- package/dist/translators/streaming/ollama.message.stop.translator.js.map +1 -0
- package/dist/translators/streaming/ollama.stream.translator.d.ts +20 -0
- package/dist/translators/streaming/ollama.stream.translator.d.ts.map +1 -0
- package/dist/translators/streaming/ollama.stream.translator.js +82 -0
- package/dist/translators/streaming/ollama.stream.translator.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/request.types.d.ts +13 -0
- package/dist/types/request.types.d.ts.map +1 -0
- package/dist/types/request.types.js +8 -0
- package/dist/types/request.types.js.map +1 -0
- package/dist/types/response.types.d.ts +40 -0
- package/dist/types/response.types.d.ts.map +1 -0
- package/dist/types/response.types.js +9 -0
- package/dist/types/response.types.js.map +1 -0
- package/package.json +70 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Provider Plugin
|
|
3
|
+
*
|
|
4
|
+
* Entry point for the Ollama provider plugin.
|
|
5
|
+
* Exports the plugin instance as default export per Holo plugin contract.
|
|
6
|
+
*/
|
|
7
|
+
import { OllamaProviderPlugin } from './plugin.js';
|
|
8
|
+
export * from './translators';
|
|
9
|
+
export * from './types';
|
|
10
|
+
export * from './manifest';
|
|
11
|
+
export * from './ollama.auditor';
|
|
12
|
+
export * from './ollama.provider';
|
|
13
|
+
export * from './ollama.translator';
|
|
14
|
+
export * from './plugin';
|
|
15
|
+
declare const _default: OllamaProviderPlugin;
|
|
16
|
+
export default _default;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;;AAGzB,wBAA0C"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Provider Plugin
|
|
3
|
+
*
|
|
4
|
+
* Entry point for the Ollama provider plugin.
|
|
5
|
+
* Exports the plugin instance as default export per Holo plugin contract.
|
|
6
|
+
*/
|
|
7
|
+
import { OllamaProviderPlugin } from './plugin.js';
|
|
8
|
+
export * from './translators';
|
|
9
|
+
export * from './types';
|
|
10
|
+
export * from './manifest';
|
|
11
|
+
export * from './ollama.auditor';
|
|
12
|
+
export * from './ollama.provider';
|
|
13
|
+
export * from './ollama.translator';
|
|
14
|
+
export * from './plugin';
|
|
15
|
+
// Export singleton instance as default for plugin loading
|
|
16
|
+
export default new OllamaProviderPlugin();
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AAEzB,0DAA0D;AAC1D,eAAe,IAAI,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAE5C,eAAO,MAAM,QAAQ,EAAE,cAyJtB,CAAC"}
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export const manifest = {
|
|
2
|
+
// Required identity
|
|
3
|
+
name: '@holokai/provider-ollama',
|
|
4
|
+
family: 'ollama',
|
|
5
|
+
version: '1.0.0',
|
|
6
|
+
pluginType: 'provider',
|
|
7
|
+
displayName: 'Ollama',
|
|
8
|
+
description: 'First-party Ollama provider plugin for Holokai, providing local LLM support via the Holo universal format.',
|
|
9
|
+
// Optional metadata
|
|
10
|
+
author: {
|
|
11
|
+
name: 'Holokai Team',
|
|
12
|
+
url: 'https://holok.ai'
|
|
13
|
+
},
|
|
14
|
+
license: 'MIT',
|
|
15
|
+
homepage: 'https://holok.ai/docs/providers/ollama',
|
|
16
|
+
repository: {
|
|
17
|
+
type: 'git',
|
|
18
|
+
url: 'https://github.com/holokai/holokai',
|
|
19
|
+
directory: 'packages/provider-ollama'
|
|
20
|
+
},
|
|
21
|
+
bugs: {
|
|
22
|
+
url: 'https://github.com/holokai/holokai/issues'
|
|
23
|
+
},
|
|
24
|
+
keywords: [
|
|
25
|
+
'holokai',
|
|
26
|
+
'holo',
|
|
27
|
+
'ollama',
|
|
28
|
+
'provider',
|
|
29
|
+
'llm',
|
|
30
|
+
'local',
|
|
31
|
+
'chat-completions',
|
|
32
|
+
'streaming'
|
|
33
|
+
],
|
|
34
|
+
// Engine / dependency requirements
|
|
35
|
+
engineVersion: '>=1.0.0 <2.0.0',
|
|
36
|
+
peerDependencies: {
|
|
37
|
+
'@holokai/sdk': '^1.0.0'
|
|
38
|
+
},
|
|
39
|
+
dependencies: {
|
|
40
|
+
ollama: '^0.6.3'
|
|
41
|
+
},
|
|
42
|
+
// Plugin-level capabilities
|
|
43
|
+
capabilities: {
|
|
44
|
+
supportsStreaming: true,
|
|
45
|
+
supportsHotReload: true,
|
|
46
|
+
supportsAsync: true,
|
|
47
|
+
supportsBatching: false,
|
|
48
|
+
supportsDistributed: true
|
|
49
|
+
},
|
|
50
|
+
// Permissions (what the host must allow)
|
|
51
|
+
permissions: ['network'],
|
|
52
|
+
// Configuration schema (what the operator configures for this plugin)
|
|
53
|
+
configSchema: {
|
|
54
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
55
|
+
type: 'object',
|
|
56
|
+
title: 'Ollama Provider Configuration',
|
|
57
|
+
description: 'Configuration for the @holokai/provider-ollama plugin. Used by Holokai to connect to a local or remote Ollama instance.',
|
|
58
|
+
properties: {
|
|
59
|
+
baseUrl: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'Base URL for the Ollama instance (e.g., "http://localhost:11434").',
|
|
62
|
+
format: 'uri',
|
|
63
|
+
default: 'http://localhost:11434'
|
|
64
|
+
},
|
|
65
|
+
defaultModel: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'Default Ollama model to use when no model is specified in the HoloRequest (e.g., "llama2", "mistral").'
|
|
68
|
+
},
|
|
69
|
+
allowedModels: {
|
|
70
|
+
type: 'array',
|
|
71
|
+
description: 'Optional allowlist of Ollama model names that this plugin may use. If set, all requests will be validated against this list.',
|
|
72
|
+
items: {
|
|
73
|
+
type: 'string'
|
|
74
|
+
},
|
|
75
|
+
uniqueItems: true
|
|
76
|
+
},
|
|
77
|
+
timeoutMs: {
|
|
78
|
+
type: 'integer',
|
|
79
|
+
description: 'Default request timeout in milliseconds for Ollama calls.',
|
|
80
|
+
minimum: 1000,
|
|
81
|
+
maximum: 600000,
|
|
82
|
+
default: 120000
|
|
83
|
+
},
|
|
84
|
+
maxRetries: {
|
|
85
|
+
type: 'integer',
|
|
86
|
+
description: 'Maximum number of retry attempts for transient Ollama errors.',
|
|
87
|
+
minimum: 0,
|
|
88
|
+
maximum: 10,
|
|
89
|
+
default: 2
|
|
90
|
+
},
|
|
91
|
+
logRequests: {
|
|
92
|
+
type: 'boolean',
|
|
93
|
+
description: 'If true, log summarized request/response metadata for observability.',
|
|
94
|
+
default: false
|
|
95
|
+
},
|
|
96
|
+
telemetrySampleRate: {
|
|
97
|
+
type: 'number',
|
|
98
|
+
description: 'Sampling rate (0.0–1.0) for sending telemetry events related to this provider.',
|
|
99
|
+
minimum: 0,
|
|
100
|
+
maximum: 1,
|
|
101
|
+
default: 1
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
required: ['baseUrl'],
|
|
105
|
+
additionalProperties: false
|
|
106
|
+
},
|
|
107
|
+
// Marketplace metadata
|
|
108
|
+
category: 'ai-providers',
|
|
109
|
+
screenshots: [
|
|
110
|
+
'https://holok.ai/assets/screenshots/provider-ollama-1.png'
|
|
111
|
+
],
|
|
112
|
+
changelog: 'https://holok.ai/docs/providers/ollama/changelog',
|
|
113
|
+
pricing: {
|
|
114
|
+
model: 'free',
|
|
115
|
+
price: 0,
|
|
116
|
+
currency: 'USD',
|
|
117
|
+
billingPeriod: 'one-time'
|
|
118
|
+
},
|
|
119
|
+
support: {
|
|
120
|
+
email: 'support@holok.ai',
|
|
121
|
+
documentation: 'https://holok.ai/docs/providers/ollama'
|
|
122
|
+
},
|
|
123
|
+
// Upgrade semantics
|
|
124
|
+
upgradeFrom: '>=1.0.0',
|
|
125
|
+
// Entrypoints
|
|
126
|
+
main: 'dist/index.js',
|
|
127
|
+
types: 'dist/index.d.ts',
|
|
128
|
+
// Custom metadata for host/runtime
|
|
129
|
+
custom: {
|
|
130
|
+
// Used by the host/plugin loader to auto-wire this plugin
|
|
131
|
+
providerKind: 'ollama',
|
|
132
|
+
// Hints for the host UI
|
|
133
|
+
recommendedDefaultModel: 'llama2'
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseAuditor, HoloWorkerRequest, HoloWorkerResponse, ProviderEnvelope } from "@holokai/sdk";
|
|
2
|
+
import { ChatRequest, GenerateRequest } from "ollama";
|
|
3
|
+
import { LlmRequest, LlmResponse } from "@holokai/sdk/core/entities";
|
|
4
|
+
export declare class OllamaAuditor extends BaseAuditor {
|
|
5
|
+
readonly provider = "ollama";
|
|
6
|
+
protected toHoloRequest(workerRequest: HoloWorkerRequest, llmRequest: Omit<LlmRequest, 'id'>): void;
|
|
7
|
+
protected mapProviderPayload(workerRequest: HoloWorkerRequest, llmRequest: Omit<LlmRequest, 'id'>): void;
|
|
8
|
+
protected mapResponseToHolo(workerResponse: HoloWorkerResponse, llmResponse: Omit<LlmResponse, 'id'>): void;
|
|
9
|
+
protected collectResponseMetrics(workerResponse: HoloWorkerResponse, llmResponse: Omit<LlmResponse, 'id'>): void;
|
|
10
|
+
private extractUserPromptFromMessages;
|
|
11
|
+
private extractSystemPromptFromMessages;
|
|
12
|
+
/**
|
|
13
|
+
* Calculate time to first token using Ollama's timing data
|
|
14
|
+
* Time to first token = load_duration + prompt_eval_duration
|
|
15
|
+
* This represents the time spent loading the model and evaluating the prompt before generating the first token
|
|
16
|
+
* @param payload - Ollama response payload with timing information
|
|
17
|
+
* @returns Time to first token in milliseconds, or undefined if timing data is unavailable
|
|
18
|
+
*/
|
|
19
|
+
private calculateTimeToFirstToken;
|
|
20
|
+
protected createProviderEnvelope(payload: GenerateRequest | ChatRequest): Promise<ProviderEnvelope>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ollama.auditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.auditor.d.ts","sourceRoot":"","sources":["../src/ollama.auditor.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAElB,gBAAgB,EAEnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAC,UAAU,EAAE,WAAW,EAAY,MAAM,4BAA4B,CAAC;AAE9E,qBACa,aAAc,SAAQ,WAAW;IAC1C,QAAQ,CAAC,QAAQ,YAAY;IAE7B,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI;IA4BnG,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI;IAQxG,SAAS,CAAC,iBAAiB,CACvB,cAAc,EAAE,kBAAkB,EAClC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GACrC,IAAI;IA2BP,SAAS,CAAC,sBAAsB,CAC5B,cAAc,EAAE,kBAAkB,EAClC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GACrC,IAAI;IAyCP,OAAO,CAAC,6BAA6B;IAWrC,OAAO,CAAC,+BAA+B;IAOvC;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;cAYjB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAK5G"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { injectable } from 'tsyringe';
|
|
8
|
+
import { BaseAuditor, pickDefined, RequestType } from "@holokai/sdk";
|
|
9
|
+
import { LlmStatus } from "@holokai/sdk/core/entities";
|
|
10
|
+
let OllamaAuditor = class OllamaAuditor extends BaseAuditor {
|
|
11
|
+
provider = 'ollama';
|
|
12
|
+
toHoloRequest(workerRequest, llmRequest) {
|
|
13
|
+
const payload = workerRequest.payload;
|
|
14
|
+
// Set model
|
|
15
|
+
llmRequest.model_slug = payload.model;
|
|
16
|
+
// Set prompt/message content based on request type
|
|
17
|
+
if (workerRequest.type === RequestType.CHAT) {
|
|
18
|
+
const chatPayload = payload;
|
|
19
|
+
const userPrompt = this.extractUserPromptFromMessages(chatPayload.messages);
|
|
20
|
+
const systemPrompt = this.extractSystemPromptFromMessages(chatPayload.messages);
|
|
21
|
+
if (userPrompt !== undefined) {
|
|
22
|
+
llmRequest.user_prompt = userPrompt;
|
|
23
|
+
}
|
|
24
|
+
if (systemPrompt !== undefined) {
|
|
25
|
+
llmRequest.system_prompt = systemPrompt;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (workerRequest.type === RequestType.GENERATE) {
|
|
29
|
+
const generatePayload = payload;
|
|
30
|
+
if (generatePayload.prompt !== undefined) {
|
|
31
|
+
llmRequest.user_prompt = generatePayload.prompt;
|
|
32
|
+
}
|
|
33
|
+
if (generatePayload.system !== undefined) {
|
|
34
|
+
llmRequest.system_prompt = generatePayload.system;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
mapProviderPayload(workerRequest, llmRequest) {
|
|
39
|
+
const payload = workerRequest.payload;
|
|
40
|
+
// Set options
|
|
41
|
+
if (payload.options !== undefined) {
|
|
42
|
+
llmRequest.options = payload.options;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
mapResponseToHolo(workerResponse, llmResponse) {
|
|
46
|
+
const payload = workerResponse.payload;
|
|
47
|
+
// Extract model from payload
|
|
48
|
+
llmResponse.model_slug = payload.model || 'unknown';
|
|
49
|
+
// Extract response text from final response
|
|
50
|
+
if (workerResponse.fullResponse !== undefined) {
|
|
51
|
+
llmResponse.response = workerResponse.fullResponse;
|
|
52
|
+
}
|
|
53
|
+
else if (payload.response !== undefined) {
|
|
54
|
+
// Generate format
|
|
55
|
+
llmResponse.response = payload.response;
|
|
56
|
+
}
|
|
57
|
+
else if (payload.message?.content !== undefined) {
|
|
58
|
+
// Chat format - handle empty content with tool calls
|
|
59
|
+
if (payload.message.content === '' && payload.message.tool_calls) {
|
|
60
|
+
llmResponse.response = JSON.stringify(payload.message.tool_calls);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
llmResponse.response = payload.message.content;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Ensure response is never undefined for successful completions
|
|
67
|
+
if (llmResponse.response === undefined) {
|
|
68
|
+
llmResponse.response = '';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
collectResponseMetrics(workerResponse, llmResponse) {
|
|
72
|
+
const payload = workerResponse.payload;
|
|
73
|
+
// Extract token usage from metrics or payload
|
|
74
|
+
if (workerResponse.metrics) {
|
|
75
|
+
llmResponse.usage_raw = workerResponse.metrics;
|
|
76
|
+
llmResponse.input_tokens = workerResponse.metrics.inputTokens;
|
|
77
|
+
llmResponse.output_tokens = workerResponse.metrics.outputTokens;
|
|
78
|
+
llmResponse.time_to_first_token = workerResponse.metrics.timeToFirstToken;
|
|
79
|
+
llmResponse.total_processing_time = workerResponse.metrics.totalProcessingTime;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const promptTokens = payload.prompt_eval_count || 0;
|
|
83
|
+
const responseTokens = payload.eval_count || 0;
|
|
84
|
+
// Fallback to payload data
|
|
85
|
+
llmResponse.input_tokens = promptTokens;
|
|
86
|
+
llmResponse.output_tokens = responseTokens;
|
|
87
|
+
if (payload.total_duration) {
|
|
88
|
+
llmResponse.total_processing_time = Math.round(payload.total_duration / 1000000); // Convert nanoseconds to milliseconds
|
|
89
|
+
}
|
|
90
|
+
// Calculate time to first token using Ollama timing data
|
|
91
|
+
llmResponse.time_to_first_token = this.calculateTimeToFirstToken(payload);
|
|
92
|
+
const metrics = {
|
|
93
|
+
input_tokens: promptTokens,
|
|
94
|
+
output_tokens: responseTokens,
|
|
95
|
+
time_to_first_token: this.calculateTimeToFirstToken(payload),
|
|
96
|
+
total_processing_time: (payload.total_duration ? Math.round(payload.total_duration / 1000000) : undefined)
|
|
97
|
+
};
|
|
98
|
+
llmResponse.usage_raw = metrics;
|
|
99
|
+
}
|
|
100
|
+
// Set status based on completion
|
|
101
|
+
if (payload.done === true) {
|
|
102
|
+
llmResponse.status = LlmStatus.SUCCESS;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
llmResponse.status = LlmStatus.PARTIAL;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
extractUserPromptFromMessages(messages) {
|
|
109
|
+
if (!messages || !Array.isArray(messages))
|
|
110
|
+
return undefined;
|
|
111
|
+
const userMessages = messages.filter(msg => msg.role === 'user');
|
|
112
|
+
if (userMessages.length === 0)
|
|
113
|
+
return undefined;
|
|
114
|
+
// Return the last user message content
|
|
115
|
+
const lastUserMessage = userMessages[userMessages.length - 1];
|
|
116
|
+
return typeof lastUserMessage.content === 'string' ? lastUserMessage.content : undefined;
|
|
117
|
+
}
|
|
118
|
+
extractSystemPromptFromMessages(messages) {
|
|
119
|
+
if (!messages || !Array.isArray(messages))
|
|
120
|
+
return undefined;
|
|
121
|
+
const systemMessage = messages.find(msg => msg.role === 'system');
|
|
122
|
+
return systemMessage && typeof systemMessage.content === 'string' ? systemMessage.content : undefined;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Calculate time to first token using Ollama's timing data
|
|
126
|
+
* Time to first token = load_duration + prompt_eval_duration
|
|
127
|
+
* This represents the time spent loading the model and evaluating the prompt before generating the first token
|
|
128
|
+
* @param payload - Ollama response payload with timing information
|
|
129
|
+
* @returns Time to first token in milliseconds, or undefined if timing data is unavailable
|
|
130
|
+
*/
|
|
131
|
+
calculateTimeToFirstToken(payload) {
|
|
132
|
+
const loadDuration = payload.load_duration;
|
|
133
|
+
const promptEvalDuration = payload.prompt_eval_duration;
|
|
134
|
+
if (loadDuration !== undefined && promptEvalDuration !== undefined) {
|
|
135
|
+
// Convert nanoseconds to milliseconds and sum the durations
|
|
136
|
+
const timeToFirstTokenNs = loadDuration + promptEvalDuration;
|
|
137
|
+
return Math.round(timeToFirstTokenNs / 1000000);
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
async createProviderEnvelope(payload) {
|
|
142
|
+
return pickDefined({
|
|
143
|
+
model_slug: payload.model
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
OllamaAuditor = __decorate([
|
|
148
|
+
injectable()
|
|
149
|
+
], OllamaAuditor);
|
|
150
|
+
export { OllamaAuditor };
|
|
151
|
+
//# sourceMappingURL=ollama.auditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.auditor.js","sourceRoot":"","sources":["../src/ollama.auditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChatRequest, ErrorResponse, GenerateRequest, ListResponse, Ollama } from 'ollama';
|
|
2
|
+
import { BaseProvider, IAuditor, IProviderTranslator, IResponseFactory, ProviderContext, RunHandle } from '@holokai/sdk';
|
|
3
|
+
export declare class OllamaProvider extends BaseProvider<Ollama, GenerateRequest | ChatRequest> {
|
|
4
|
+
protected createAuditor(): IAuditor;
|
|
5
|
+
protected createClient(): Ollama;
|
|
6
|
+
protected createTranslator(): IProviderTranslator;
|
|
7
|
+
protected createResponseFactory(): IResponseFactory;
|
|
8
|
+
getModels(allowedModels: string[] | true): Promise<ListResponse>;
|
|
9
|
+
protected handleError(error: Error): Promise<ErrorResponse>;
|
|
10
|
+
protected handleRequest(payload: GenerateRequest | ChatRequest, ctx: ProviderContext): Promise<RunHandle<any>>;
|
|
11
|
+
private ollamaGenerate;
|
|
12
|
+
private ollamaChat;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ollama.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.provider.d.ts","sourceRoot":"","sources":["../src/ollama.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAC,MAAM,QAAQ,CAAC;AACzF,OAAO,EACH,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EAEf,SAAS,EACZ,MAAM,cAAc,CAAC;AAKtB,qBAAa,cAAe,SAAQ,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAAC;IAEnF,SAAS,CAAC,aAAa,IAAI,QAAQ;IAInC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAIjD,SAAS,CAAC,qBAAqB,IAAI,gBAAgB;IAI7C,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;cActD,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;cAIjD,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAUtG,cAAc;YA4Bd,UAAU;CA2B3B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Ollama } from 'ollama';
|
|
2
|
+
import { BaseProvider, RequestType } from '@holokai/sdk';
|
|
3
|
+
import { OllamaAuditor } from './ollama.auditor';
|
|
4
|
+
import { OllamaTranslator } from './ollama.translator';
|
|
5
|
+
import { OllamaResponseFactory } from './ollama.response.factory';
|
|
6
|
+
export class OllamaProvider extends BaseProvider {
|
|
7
|
+
createAuditor() {
|
|
8
|
+
return new OllamaAuditor();
|
|
9
|
+
}
|
|
10
|
+
createClient() {
|
|
11
|
+
return new Ollama(this._config);
|
|
12
|
+
}
|
|
13
|
+
createTranslator() {
|
|
14
|
+
return OllamaTranslator.instance();
|
|
15
|
+
}
|
|
16
|
+
createResponseFactory() {
|
|
17
|
+
return OllamaResponseFactory.instance();
|
|
18
|
+
}
|
|
19
|
+
async getModels(allowedModels) {
|
|
20
|
+
const response = await this.client.list();
|
|
21
|
+
if (allowedModels === true) {
|
|
22
|
+
return response;
|
|
23
|
+
}
|
|
24
|
+
const models = response.models.filter(model => allowedModels.includes(model.name));
|
|
25
|
+
return {
|
|
26
|
+
...response,
|
|
27
|
+
models
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async handleError(error) {
|
|
31
|
+
return { error: error.message };
|
|
32
|
+
}
|
|
33
|
+
async handleRequest(payload, ctx) {
|
|
34
|
+
switch (ctx.requestType) {
|
|
35
|
+
case RequestType.GENERATE:
|
|
36
|
+
return this.ollamaGenerate(payload, ctx);
|
|
37
|
+
case RequestType.CHAT:
|
|
38
|
+
return this.ollamaChat(payload, ctx);
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`Unsupported requestType: ${JSON.stringify(ctx)}`);
|
|
41
|
+
}
|
|
42
|
+
async ollamaGenerate(request, ctx) {
|
|
43
|
+
if (!request.stream) {
|
|
44
|
+
return {
|
|
45
|
+
final: async () => {
|
|
46
|
+
return await this.client.generate({ ...request, stream: false /* ensure */ });
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const finalPromise = (async () => {
|
|
51
|
+
const streamResp = await this.client.generate({ ...request, stream: true });
|
|
52
|
+
for await (const chunk of streamResp) {
|
|
53
|
+
ctx.emitStreamEvent(chunk);
|
|
54
|
+
const token = chunk?.response ?? '';
|
|
55
|
+
if (token)
|
|
56
|
+
ctx.emitTextDelta(token);
|
|
57
|
+
if (chunk?.done)
|
|
58
|
+
return chunk; // authoritative completion value
|
|
59
|
+
}
|
|
60
|
+
// If Ollama ends without a done flag
|
|
61
|
+
return { done: true };
|
|
62
|
+
})();
|
|
63
|
+
return { final: () => finalPromise };
|
|
64
|
+
}
|
|
65
|
+
async ollamaChat(request, ctx) {
|
|
66
|
+
if (!request.stream) {
|
|
67
|
+
return {
|
|
68
|
+
final: async () => {
|
|
69
|
+
return await this.client.chat({ ...request, stream: false });
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const finalPromise = (async () => {
|
|
74
|
+
const streamResp = await this.client.chat({ ...request, stream: true });
|
|
75
|
+
for await (const chunk of streamResp) {
|
|
76
|
+
ctx.emitStreamEvent(chunk);
|
|
77
|
+
const token = chunk?.message?.content ?? '';
|
|
78
|
+
if (token)
|
|
79
|
+
ctx.emitTextDelta(token);
|
|
80
|
+
if (chunk?.done)
|
|
81
|
+
return chunk;
|
|
82
|
+
}
|
|
83
|
+
return { done: true };
|
|
84
|
+
})();
|
|
85
|
+
return { final: () => finalPromise };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=ollama.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.provider.js","sourceRoot":"","sources":["../src/ollama.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IResponseFactory } from "@holokai/sdk";
|
|
2
|
+
import { ErrorResponse } from "ollama";
|
|
3
|
+
export declare class OllamaResponseFactory implements IResponseFactory {
|
|
4
|
+
createError(message: string): ErrorResponse;
|
|
5
|
+
static instance(): OllamaResponseFactory;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=ollama.response.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.response.factory.d.ts","sourceRoot":"","sources":["../src/ollama.response.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAC,aAAa,EAAC,MAAM,QAAQ,CAAC;AAErC,qBAAa,qBAAsB,YAAW,gBAAgB;IAC1D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa;IAI3C,MAAM,CAAC,QAAQ,IAAI,qBAAqB;CAG3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.response.factory.js","sourceRoot":"","sources":["../src/ollama.response.factory.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,qBAAqB;IAC9B,WAAW,CAAC,OAAe;QACvB,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,QAAQ;QACX,OAAO,IAAI,qBAAqB,EAAE,CAAC;IACvC,CAAC;CACJ"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { HoloMessage, HoloRequest, HoloResponse, HoloStreamChunk, IProviderTranslator } from "@holokai/sdk";
|
|
3
|
+
import { OllamaChatRequestTranslator, OllamaChatResponseTranslator, OllamaGenerateRequestTranslator, OllamaGenerateResponseTranslator, OllamaMessageTranslator, OllamaStreamTranslator } from "./translators";
|
|
4
|
+
import { OllamaChatRequest, OllamaGenerateRequest, OllamaMessage, OllamaResponse } from "./types";
|
|
5
|
+
export declare class OllamaTranslator implements IProviderTranslator {
|
|
6
|
+
private ollamaGenerateRequestTranslator;
|
|
7
|
+
private ollamaChatRequestTranslator;
|
|
8
|
+
private ollamaMessageTranslator;
|
|
9
|
+
private ollamaChatResponseTranslator;
|
|
10
|
+
private ollamaGenerateResponseTranslator;
|
|
11
|
+
private ollamaStreamTranslator;
|
|
12
|
+
constructor(ollamaGenerateRequestTranslator: OllamaGenerateRequestTranslator, ollamaChatRequestTranslator: OllamaChatRequestTranslator, ollamaMessageTranslator: OllamaMessageTranslator, ollamaChatResponseTranslator: OllamaChatResponseTranslator, ollamaGenerateResponseTranslator: OllamaGenerateResponseTranslator, ollamaStreamTranslator: OllamaStreamTranslator);
|
|
13
|
+
static instance(): IProviderTranslator;
|
|
14
|
+
fromHoloResponse(response: HoloResponse): Promise<Partial<OllamaResponse>>;
|
|
15
|
+
toHoloResponse(response: OllamaResponse): Promise<Partial<HoloResponse>>;
|
|
16
|
+
fromHoloRequest(request: HoloRequest): Promise<Partial<OllamaChatRequest>>;
|
|
17
|
+
toHoloRequest(request: OllamaChatRequest | OllamaGenerateRequest): Promise<Partial<HoloRequest>>;
|
|
18
|
+
fromHoloMessages(messages: HoloMessage[]): Promise<Partial<OllamaMessage>[]>;
|
|
19
|
+
toHoloMessages(messages: OllamaMessage[]): Promise<Partial<HoloMessage>[]>;
|
|
20
|
+
fromHoloStreamChunks(chunks: HoloStreamChunk[]): Promise<unknown>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ollama.translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.translator.d.ts","sourceRoot":"","sources":["../src/ollama.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAc,MAAM,cAAc,CAAC;AACvH,OAAO,EACH,2BAA2B,EAC3B,4BAA4B,EAE5B,+BAA+B,EAC/B,gCAAgC,EAGhC,uBAAuB,EAEvB,sBAAsB,EAEzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAGH,iBAAiB,EAEjB,qBAAqB,EAErB,aAAa,EACb,cAAc,EACjB,MAAM,SAAS,CAAC;AAEjB,qBACa,gBAAiB,YAAW,mBAAmB;IAEpD,OAAO,CAAC,+BAA+B;IACvC,OAAO,CAAC,2BAA2B;IACnC,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,4BAA4B;IACpC,OAAO,CAAC,gCAAgC;IACxC,OAAO,CAAC,sBAAsB;gBALtB,+BAA+B,EAAE,+BAA+B,EAChE,2BAA2B,EAAE,2BAA2B,EACxD,uBAAuB,EAAE,uBAAuB,EAChD,4BAA4B,EAAE,4BAA4B,EAC1D,gCAAgC,EAAE,gCAAgC,EAClE,sBAAsB,EAAE,sBAAsB;IAK1D,MAAM,CAAC,QAAQ,IAAI,mBAAmB;IA+BhC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAK1E,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IASxE,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAO1E,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAOhG,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;IAI5E,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;IAI1E,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAG1E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var OllamaTranslator_1;
|
|
11
|
+
import 'reflect-metadata';
|
|
12
|
+
import { injectable } from "tsyringe";
|
|
13
|
+
import { RequestType } from "@holokai/sdk";
|
|
14
|
+
import { OllamaChatRequestTranslator, OllamaChatResponseTranslator, OllamaContentDeltaTranslator, OllamaGenerateRequestTranslator, OllamaGenerateResponseTranslator, OllamaMessageDeltaTranslator, OllamaMessageStopTranslator, OllamaMessageTranslator, OllamaOptionsTranslator, OllamaStreamTranslator, OllamaToolTranslator } from "./translators";
|
|
15
|
+
import { isGenerateRequest, isGenerateResponse } from "./types";
|
|
16
|
+
let OllamaTranslator = OllamaTranslator_1 = class OllamaTranslator {
|
|
17
|
+
ollamaGenerateRequestTranslator;
|
|
18
|
+
ollamaChatRequestTranslator;
|
|
19
|
+
ollamaMessageTranslator;
|
|
20
|
+
ollamaChatResponseTranslator;
|
|
21
|
+
ollamaGenerateResponseTranslator;
|
|
22
|
+
ollamaStreamTranslator;
|
|
23
|
+
constructor(ollamaGenerateRequestTranslator, ollamaChatRequestTranslator, ollamaMessageTranslator, ollamaChatResponseTranslator, ollamaGenerateResponseTranslator, ollamaStreamTranslator) {
|
|
24
|
+
this.ollamaGenerateRequestTranslator = ollamaGenerateRequestTranslator;
|
|
25
|
+
this.ollamaChatRequestTranslator = ollamaChatRequestTranslator;
|
|
26
|
+
this.ollamaMessageTranslator = ollamaMessageTranslator;
|
|
27
|
+
this.ollamaChatResponseTranslator = ollamaChatResponseTranslator;
|
|
28
|
+
this.ollamaGenerateResponseTranslator = ollamaGenerateResponseTranslator;
|
|
29
|
+
this.ollamaStreamTranslator = ollamaStreamTranslator;
|
|
30
|
+
}
|
|
31
|
+
static instance() {
|
|
32
|
+
const messageTranslator = new OllamaMessageTranslator();
|
|
33
|
+
const toolTranslator = new OllamaToolTranslator();
|
|
34
|
+
const optionsTranslator = new OllamaOptionsTranslator();
|
|
35
|
+
const generateRequestTranslator = new OllamaGenerateRequestTranslator();
|
|
36
|
+
const chatRequestTranslator = new OllamaChatRequestTranslator(messageTranslator, toolTranslator, optionsTranslator);
|
|
37
|
+
const generateResponseTranslator = new OllamaGenerateResponseTranslator();
|
|
38
|
+
const chatResponseTranslator = new OllamaChatResponseTranslator(messageTranslator);
|
|
39
|
+
const contentDeltaTranslator = new OllamaContentDeltaTranslator();
|
|
40
|
+
const messageDeltaTranslator = new OllamaMessageDeltaTranslator();
|
|
41
|
+
const messageStopTranslator = new OllamaMessageStopTranslator();
|
|
42
|
+
const streamTranslator = new OllamaStreamTranslator(contentDeltaTranslator, messageDeltaTranslator, messageStopTranslator);
|
|
43
|
+
return new OllamaTranslator_1(generateRequestTranslator, chatRequestTranslator, messageTranslator, chatResponseTranslator, generateResponseTranslator, streamTranslator);
|
|
44
|
+
}
|
|
45
|
+
async fromHoloResponse(response) {
|
|
46
|
+
// Default to Chat response
|
|
47
|
+
return this.ollamaChatResponseTranslator.fromHolo(response);
|
|
48
|
+
}
|
|
49
|
+
async toHoloResponse(response) {
|
|
50
|
+
// Check if it's a Generate response (has 'response' field) or Chat response (has 'message' field)
|
|
51
|
+
if (isGenerateResponse(response)) {
|
|
52
|
+
return this.ollamaGenerateResponseTranslator.toHolo(response);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return this.ollamaChatResponseTranslator.toHolo(response);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async fromHoloRequest(request) {
|
|
59
|
+
if (request.request_type === RequestType.GENERATE) {
|
|
60
|
+
return this.ollamaGenerateRequestTranslator.fromHolo(request);
|
|
61
|
+
}
|
|
62
|
+
return this.ollamaChatRequestTranslator.fromHolo(request);
|
|
63
|
+
}
|
|
64
|
+
async toHoloRequest(request) {
|
|
65
|
+
if (isGenerateRequest(request)) {
|
|
66
|
+
return this.ollamaGenerateRequestTranslator.toHolo(request);
|
|
67
|
+
}
|
|
68
|
+
return this.ollamaChatRequestTranslator.toHolo(request);
|
|
69
|
+
}
|
|
70
|
+
async fromHoloMessages(messages) {
|
|
71
|
+
return this.ollamaMessageTranslator.fromHoloArray(messages);
|
|
72
|
+
}
|
|
73
|
+
async toHoloMessages(messages) {
|
|
74
|
+
return this.ollamaMessageTranslator.toHoloArray(messages);
|
|
75
|
+
}
|
|
76
|
+
async fromHoloStreamChunks(chunks) {
|
|
77
|
+
return this.ollamaStreamTranslator.fromHoloManyArray(chunks);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
OllamaTranslator = OllamaTranslator_1 = __decorate([
|
|
81
|
+
injectable(),
|
|
82
|
+
__metadata("design:paramtypes", [OllamaGenerateRequestTranslator,
|
|
83
|
+
OllamaChatRequestTranslator,
|
|
84
|
+
OllamaMessageTranslator,
|
|
85
|
+
OllamaChatResponseTranslator,
|
|
86
|
+
OllamaGenerateResponseTranslator,
|
|
87
|
+
OllamaStreamTranslator])
|
|
88
|
+
], OllamaTranslator);
|
|
89
|
+
export { OllamaTranslator };
|
|
90
|
+
//# sourceMappingURL=ollama.translator.js.map
|