@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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +750 -0
  3. package/dist/index.d.ts +17 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +17 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/manifest.d.ts +3 -0
  8. package/dist/manifest.d.ts.map +1 -0
  9. package/dist/manifest.js +136 -0
  10. package/dist/manifest.js.map +1 -0
  11. package/dist/ollama.auditor.d.ts +22 -0
  12. package/dist/ollama.auditor.d.ts.map +1 -0
  13. package/dist/ollama.auditor.js +151 -0
  14. package/dist/ollama.auditor.js.map +1 -0
  15. package/dist/ollama.provider.d.ts +14 -0
  16. package/dist/ollama.provider.d.ts.map +1 -0
  17. package/dist/ollama.provider.js +88 -0
  18. package/dist/ollama.provider.js.map +1 -0
  19. package/dist/ollama.response.factory.d.ts +7 -0
  20. package/dist/ollama.response.factory.d.ts.map +1 -0
  21. package/dist/ollama.response.factory.js +9 -0
  22. package/dist/ollama.response.factory.js.map +1 -0
  23. package/dist/ollama.translator.d.ts +22 -0
  24. package/dist/ollama.translator.d.ts.map +1 -0
  25. package/dist/ollama.translator.js +90 -0
  26. package/dist/ollama.translator.js.map +1 -0
  27. package/dist/ollama.wire.adapter.d.ts +6 -0
  28. package/dist/ollama.wire.adapter.d.ts.map +1 -0
  29. package/dist/ollama.wire.adapter.js +11 -0
  30. package/dist/ollama.wire.adapter.js.map +1 -0
  31. package/dist/plugin.d.ts +19 -0
  32. package/dist/plugin.d.ts.map +1 -0
  33. package/dist/plugin.js +57 -0
  34. package/dist/plugin.js.map +1 -0
  35. package/dist/translators/index.d.ts +9 -0
  36. package/dist/translators/index.d.ts.map +1 -0
  37. package/dist/translators/index.js +9 -0
  38. package/dist/translators/index.js.map +1 -0
  39. package/dist/translators/ollama.chat.request.translator.d.ts +20 -0
  40. package/dist/translators/ollama.chat.request.translator.d.ts.map +1 -0
  41. package/dist/translators/ollama.chat.request.translator.js +100 -0
  42. package/dist/translators/ollama.chat.request.translator.js.map +1 -0
  43. package/dist/translators/ollama.chat.response.translator.d.ts +22 -0
  44. package/dist/translators/ollama.chat.response.translator.d.ts.map +1 -0
  45. package/dist/translators/ollama.chat.response.translator.js +127 -0
  46. package/dist/translators/ollama.chat.response.translator.js.map +1 -0
  47. package/dist/translators/ollama.generate.request.translator.d.ts +13 -0
  48. package/dist/translators/ollama.generate.request.translator.d.ts.map +1 -0
  49. package/dist/translators/ollama.generate.request.translator.js +90 -0
  50. package/dist/translators/ollama.generate.request.translator.js.map +1 -0
  51. package/dist/translators/ollama.generate.response.translator.d.ts +20 -0
  52. package/dist/translators/ollama.generate.response.translator.d.ts.map +1 -0
  53. package/dist/translators/ollama.generate.response.translator.js +104 -0
  54. package/dist/translators/ollama.generate.response.translator.js.map +1 -0
  55. package/dist/translators/ollama.message.translators.d.ts +14 -0
  56. package/dist/translators/ollama.message.translators.d.ts.map +1 -0
  57. package/dist/translators/ollama.message.translators.js +117 -0
  58. package/dist/translators/ollama.message.translators.js.map +1 -0
  59. package/dist/translators/ollama.options.translators.d.ts +11 -0
  60. package/dist/translators/ollama.options.translators.d.ts.map +1 -0
  61. package/dist/translators/ollama.options.translators.js +37 -0
  62. package/dist/translators/ollama.options.translators.js.map +1 -0
  63. package/dist/translators/ollama.tool.translators.d.ts +13 -0
  64. package/dist/translators/ollama.tool.translators.d.ts.map +1 -0
  65. package/dist/translators/ollama.tool.translators.js +62 -0
  66. package/dist/translators/ollama.tool.translators.js.map +1 -0
  67. package/dist/translators/streaming/index.d.ts +5 -0
  68. package/dist/translators/streaming/index.d.ts.map +1 -0
  69. package/dist/translators/streaming/index.js +5 -0
  70. package/dist/translators/streaming/index.js.map +1 -0
  71. package/dist/translators/streaming/ollama.content.delta.translator.d.ts +14 -0
  72. package/dist/translators/streaming/ollama.content.delta.translator.d.ts.map +1 -0
  73. package/dist/translators/streaming/ollama.content.delta.translator.js +76 -0
  74. package/dist/translators/streaming/ollama.content.delta.translator.js.map +1 -0
  75. package/dist/translators/streaming/ollama.message.delta.translator.d.ts +15 -0
  76. package/dist/translators/streaming/ollama.message.delta.translator.d.ts.map +1 -0
  77. package/dist/translators/streaming/ollama.message.delta.translator.js +116 -0
  78. package/dist/translators/streaming/ollama.message.delta.translator.js.map +1 -0
  79. package/dist/translators/streaming/ollama.message.stop.translator.d.ts +16 -0
  80. package/dist/translators/streaming/ollama.message.stop.translator.d.ts.map +1 -0
  81. package/dist/translators/streaming/ollama.message.stop.translator.js +87 -0
  82. package/dist/translators/streaming/ollama.message.stop.translator.js.map +1 -0
  83. package/dist/translators/streaming/ollama.stream.translator.d.ts +20 -0
  84. package/dist/translators/streaming/ollama.stream.translator.d.ts.map +1 -0
  85. package/dist/translators/streaming/ollama.stream.translator.js +82 -0
  86. package/dist/translators/streaming/ollama.stream.translator.js.map +1 -0
  87. package/dist/types/index.d.ts +6 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +11 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/types/request.types.d.ts +13 -0
  92. package/dist/types/request.types.d.ts.map +1 -0
  93. package/dist/types/request.types.js +8 -0
  94. package/dist/types/request.types.js.map +1 -0
  95. package/dist/types/response.types.d.ts +40 -0
  96. package/dist/types/response.types.d.ts.map +1 -0
  97. package/dist/types/response.types.js +9 -0
  98. package/dist/types/response.types.js.map +1 -0
  99. package/package.json +70 -0
@@ -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,3 @@
1
+ import { PluginManifest } from "@holokai/sdk";
2
+ export declare const manifest: PluginManifest;
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -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"}
@@ -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,9 @@
1
+ export class OllamaResponseFactory {
2
+ createError(message) {
3
+ return { error: message };
4
+ }
5
+ static instance() {
6
+ return new OllamaResponseFactory();
7
+ }
8
+ }
9
+ //# sourceMappingURL=ollama.response.factory.js.map
@@ -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