@holokai/holo-provider-ollama 1.3.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/ollama.auditor.d.ts +12 -28
- package/dist/ollama.auditor.d.ts.map +1 -1
- package/dist/ollama.auditor.js +81 -78
- package/dist/ollama.auditor.js.map +1 -1
- package/dist/ollama.provider.d.ts +9 -7
- package/dist/ollama.provider.d.ts.map +1 -1
- package/dist/ollama.provider.js +58 -36
- package/dist/ollama.provider.js.map +1 -1
- package/dist/ollama.response.factory.d.ts +1 -1
- package/dist/ollama.response.factory.d.ts.map +1 -1
- package/dist/ollama.translator.d.ts +9 -2
- package/dist/ollama.translator.d.ts.map +1 -1
- package/dist/ollama.translator.js +17 -0
- package/dist/ollama.translator.js.map +1 -1
- package/dist/ollama.wire.adapter.d.ts +1 -1
- package/dist/ollama.wire.adapter.d.ts.map +1 -1
- package/dist/ollama.wire.adapter.js +1 -1
- package/dist/ollama.wire.adapter.js.map +1 -1
- package/dist/plugin.d.ts +9 -7
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +13 -5
- package/dist/plugin.js.map +1 -1
- package/dist/translators/ollama.chat.request.translator.d.ts +2 -2
- package/dist/translators/ollama.chat.request.translator.d.ts.map +1 -1
- package/dist/translators/ollama.chat.request.translator.js +2 -2
- package/dist/translators/ollama.chat.request.translator.js.map +1 -1
- package/dist/translators/ollama.chat.response.translator.d.ts +2 -2
- package/dist/translators/ollama.chat.response.translator.d.ts.map +1 -1
- package/dist/translators/ollama.chat.response.translator.js +2 -2
- package/dist/translators/ollama.chat.response.translator.js.map +1 -1
- package/dist/translators/ollama.generate.request.translator.d.ts +2 -2
- package/dist/translators/ollama.generate.request.translator.d.ts.map +1 -1
- package/dist/translators/ollama.generate.request.translator.js +2 -2
- package/dist/translators/ollama.generate.request.translator.js.map +1 -1
- package/dist/translators/ollama.generate.response.translator.d.ts +2 -2
- package/dist/translators/ollama.generate.response.translator.d.ts.map +1 -1
- package/dist/translators/ollama.generate.response.translator.js +2 -2
- package/dist/translators/ollama.generate.response.translator.js.map +1 -1
- package/dist/translators/ollama.message.translators.d.ts +2 -2
- package/dist/translators/ollama.message.translators.d.ts.map +1 -1
- package/dist/translators/ollama.message.translators.js +2 -2
- package/dist/translators/ollama.message.translators.js.map +1 -1
- package/dist/translators/ollama.options.translators.d.ts +2 -2
- package/dist/translators/ollama.options.translators.d.ts.map +1 -1
- package/dist/translators/ollama.options.translators.js +2 -2
- package/dist/translators/ollama.options.translators.js.map +1 -1
- package/dist/translators/ollama.tool.translators.d.ts +2 -2
- package/dist/translators/ollama.tool.translators.d.ts.map +1 -1
- package/dist/translators/ollama.tool.translators.js +2 -2
- package/dist/translators/ollama.tool.translators.js.map +1 -1
- package/dist/translators/streaming/ollama.content.delta.translator.d.ts +2 -2
- package/dist/translators/streaming/ollama.content.delta.translator.d.ts.map +1 -1
- package/dist/translators/streaming/ollama.content.delta.translator.js +2 -2
- package/dist/translators/streaming/ollama.content.delta.translator.js.map +1 -1
- package/dist/translators/streaming/ollama.message.delta.translator.d.ts +2 -2
- package/dist/translators/streaming/ollama.message.delta.translator.d.ts.map +1 -1
- package/dist/translators/streaming/ollama.message.delta.translator.js +2 -2
- package/dist/translators/streaming/ollama.message.delta.translator.js.map +1 -1
- package/dist/translators/streaming/ollama.message.stop.translator.d.ts +2 -2
- package/dist/translators/streaming/ollama.message.stop.translator.d.ts.map +1 -1
- package/dist/translators/streaming/ollama.message.stop.translator.js +2 -2
- package/dist/translators/streaming/ollama.message.stop.translator.js.map +1 -1
- package/dist/translators/streaming/ollama.stream.translator.d.ts +2 -2
- package/dist/translators/streaming/ollama.stream.translator.d.ts.map +1 -1
- package/dist/translators/streaming/ollama.stream.translator.js +1 -1
- package/dist/translators/streaming/ollama.stream.translator.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ providing complete bidirectional translation between Ollama's native API and the
|
|
|
15
15
|
|
|
16
16
|
### Key Features
|
|
17
17
|
|
|
18
|
-
- ✅ **Full Holo SDK Integration** - Uses `@holokai/sdk` types for strict type safety
|
|
18
|
+
- ✅ **Full Holo SDK Integration** - Uses `@holokai/holo-sdk` types for strict type safety
|
|
19
19
|
- ✅ **Bidirectional Translation** - Ollama ↔ Holo format with lossless core fields
|
|
20
20
|
- ✅ **Dual Mode Support** - Both Chat and Generate endpoints
|
|
21
21
|
- ✅ **Streaming Support** - Frame-based streaming with proper orchestration
|
|
@@ -36,7 +36,7 @@ npm install @holokai/holo-provider-ollama
|
|
|
36
36
|
|
|
37
37
|
This plugin requires:
|
|
38
38
|
|
|
39
|
-
- `@holokai/sdk` ^0.1.0 - Holo universal format types and plugin contracts
|
|
39
|
+
- `@holokai/holo-sdk` ^0.1.0 - Holo universal format types and plugin contracts
|
|
40
40
|
- `ollama` ^0.6.3 - Official Ollama JavaScript SDK
|
|
41
41
|
|
|
42
42
|
### Prerequisites
|
|
@@ -74,7 +74,7 @@ Add a provider configuration to your Holo deployment:
|
|
|
74
74
|
### Usage in Code
|
|
75
75
|
|
|
76
76
|
```typescript
|
|
77
|
-
import {HoloRequest, HoloResponse} from '@holokai/sdk';
|
|
77
|
+
import {HoloRequest, HoloResponse} from '@holokai/holo-sdk';
|
|
78
78
|
|
|
79
79
|
const request: HoloRequest = {
|
|
80
80
|
model: 'llama2',
|
|
@@ -132,7 +132,7 @@ src/providers/ollama/
|
|
|
132
132
|
|
|
133
133
|
### Breaking Changes
|
|
134
134
|
|
|
135
|
-
- **Import paths changed**: Use `@holokai/sdk` for types instead of `../../types`
|
|
135
|
+
- **Import paths changed**: Use `@holokai/holo-sdk` for types instead of `../../types`
|
|
136
136
|
- **Configuration schema**: Now validated via plugin manifest
|
|
137
137
|
- **Dependency injection**: Uses plugin container instead of core DI
|
|
138
138
|
|
|
@@ -518,7 +518,7 @@ The plugin translates Ollama frames to Holo streaming events:
|
|
|
518
518
|
### Streaming Example
|
|
519
519
|
|
|
520
520
|
```typescript
|
|
521
|
-
import { HoloStreamChunk } from '@holokai/sdk';
|
|
521
|
+
import { HoloStreamChunk } from '@holokai/holo-sdk';
|
|
522
522
|
|
|
523
523
|
const stream = await ollamaProvider.streamChat(request);
|
|
524
524
|
|
|
@@ -623,7 +623,7 @@ import type {
|
|
|
623
623
|
HoloMessage,
|
|
624
624
|
HoloTool,
|
|
625
625
|
HoloJsonSchema
|
|
626
|
-
} from '@holokai/sdk';
|
|
626
|
+
} from '@holokai/holo-sdk';
|
|
627
627
|
|
|
628
628
|
// ❌ NO: Record<string, unknown>
|
|
629
629
|
// ✅ YES: Proper SDK types
|
|
@@ -644,7 +644,7 @@ interface HoloTool {
|
|
|
644
644
|
**After** (Plugin SDK):
|
|
645
645
|
|
|
646
646
|
```typescript
|
|
647
|
-
import type {HoloTool, HoloJsonSchema} from '@holokai/sdk';
|
|
647
|
+
import type {HoloTool, HoloJsonSchema} from '@holokai/holo-sdk';
|
|
648
648
|
|
|
649
649
|
interface HoloTool {
|
|
650
650
|
parameters?: HoloJsonSchema; // ✅ Strict JSON Schema Draft 7
|
|
@@ -653,7 +653,7 @@ interface HoloTool {
|
|
|
653
653
|
|
|
654
654
|
### Type Safety
|
|
655
655
|
|
|
656
|
-
All interfaces use strict TypeScript types from `@holokai/sdk` for compile-time validation.
|
|
656
|
+
All interfaces use strict TypeScript types from `@holokai/holo-sdk` for compile-time validation.
|
|
657
657
|
|
|
658
658
|
---
|
|
659
659
|
|
|
@@ -762,7 +762,7 @@ chunks in a session.
|
|
|
762
762
|
|
|
763
763
|
### SDK Documentation
|
|
764
764
|
|
|
765
|
-
- [SDK README](../sdk/README.md) - Plugin development guide and templates
|
|
765
|
+
- [SDK README](../holo-sdk/README.md) - Plugin development guide and templates
|
|
766
766
|
|
|
767
767
|
### Ollama Documentation
|
|
768
768
|
|
|
@@ -782,7 +782,7 @@ chunks in a session.
|
|
|
782
782
|
|
|
783
783
|
### Adding Features
|
|
784
784
|
|
|
785
|
-
1. Update types in `@holokai/sdk` first (if needed)
|
|
785
|
+
1. Update types in `@holokai/holo-sdk` first (if needed)
|
|
786
786
|
2. Implement translator logic
|
|
787
787
|
3. Write tests (unit + integration)
|
|
788
788
|
4. Update this README
|
package/dist/manifest.d.ts
CHANGED
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAa,MAAM,4BAA4B,CAAC;AAMtE,eAAO,MAAM,QAAQ,EAAE,cAOtB,CAAC"}
|
package/dist/manifest.js
CHANGED
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAC,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAC,aAAa,EAAC,MAAM,QAAQ,CAAC;AAErC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAC,OAAO,EAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACpC,IAAI,EAAE,0BAA0B;IAChC,OAAO;IACP,UAAU,EAAE,UAAU,CAAC,QAAQ;IAC/B,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,kCAAkC;CAClD,CAAC"}
|
package/dist/ollama.auditor.d.ts
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
|
-
import { BaseAuditor } from "@holokai/sdk/provider";
|
|
2
|
-
import type { HoloWorkerRequest, WorkerResponseEnvelope } from "@holokai/types/worker";
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import {
|
|
1
|
+
import { BaseAuditor } from "@holokai/holo-sdk/provider";
|
|
2
|
+
import type { HoloWorkerRequest, WorkerResponseEnvelope } from "@holokai/holo-types/worker";
|
|
3
|
+
import type { ProviderDoneEvent, ProviderEvent } from "@holokai/holo-types/provider";
|
|
4
|
+
import type { ProviderEnvelope, ProviderResponseMetrics } from "@holokai/holo-types/entities";
|
|
5
|
+
import { FinishReason } from "@holokai/holo-types/entities";
|
|
6
|
+
import type { HoloFinishReason, HoloUsage } from "@holokai/holo-types/holo";
|
|
6
7
|
export declare class OllamaAuditor extends BaseAuditor {
|
|
7
8
|
readonly provider = "ollama";
|
|
8
|
-
protected
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
input_tokens: any;
|
|
15
|
-
output_tokens: any;
|
|
16
|
-
time_to_first_token: any;
|
|
17
|
-
total_processing_time: any;
|
|
18
|
-
}>>;
|
|
19
|
-
protected createProviderEnvelope(payload: GenerateRequest | ChatRequest): Promise<ProviderEnvelope>;
|
|
20
|
-
protected extractExtraTokens(_metrics: Record<string, any>, base: Record<string, number>): Record<string, number>;
|
|
21
|
-
private extractUserPromptFromMessages;
|
|
22
|
-
private extractSystemPromptFromMessages;
|
|
23
|
-
/**
|
|
24
|
-
* Calculate time to first token using Ollama's timing data
|
|
25
|
-
* Time to first token = load_duration + prompt_eval_duration
|
|
26
|
-
* This represents the time spent loading the model and evaluating the prompt before generating the first token
|
|
27
|
-
* @param payload - Ollama response payload with timing information
|
|
28
|
-
* @returns Time to first token in milliseconds, or undefined if timing data is unavailable
|
|
29
|
-
*/
|
|
30
|
-
private calculateTimeToFirstToken;
|
|
9
|
+
protected extractRequestOptions(workerRequest: HoloWorkerRequest): Promise<Record<string, any>>;
|
|
10
|
+
mapFinishReason(nativeResponse: any, _protocolName?: string): HoloFinishReason;
|
|
11
|
+
mapUsage(nativeResponse: any, _protocolName?: string): HoloUsage;
|
|
12
|
+
protected mapProviderResponseMetrics(providerEvent: ProviderDoneEvent): Promise<Partial<ProviderResponseMetrics>>;
|
|
13
|
+
protected extractFinishReason(providerEvent: ProviderEvent, _envelope: WorkerResponseEnvelope): Promise<FinishReason | undefined>;
|
|
14
|
+
protected createProviderEnvelope(workerRequest: HoloWorkerRequest): Promise<ProviderEnvelope>;
|
|
31
15
|
}
|
|
32
16
|
//# sourceMappingURL=ollama.auditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.auditor.d.ts","sourceRoot":"","sources":["../src/ollama.auditor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"ollama.auditor.d.ts","sourceRoot":"","sources":["../src/ollama.auditor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAyD,MAAM,4BAA4B,CAAC;AAE/G,OAAO,KAAK,EAAC,iBAAiB,EAAE,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,KAAK,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAC,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,EAAC,gBAAgB,EAAE,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAI1E,qBACa,aAAc,SAAQ,WAAW;IAC1C,QAAQ,CAAC,QAAQ,YAAY;cAEb,qBAAqB,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAM5F,eAAe,CAAC,cAAc,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAe9E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS;cAkBzD,0BAA0B,CAAC,aAAa,EAAE,iBAAiB;cAwB3D,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;cAMvH,sBAAsB,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAgCtG"}
|
package/dist/ollama.auditor.js
CHANGED
|
@@ -5,98 +5,101 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { injectable } from 'tsyringe';
|
|
8
|
-
import { BaseAuditor } from "@holokai/sdk/provider";
|
|
9
|
-
import { pickDefined } from "@holokai/sdk";
|
|
8
|
+
import { BaseAuditor, extractPromptByRole, extractTextContent, normalizeText } from "@holokai/holo-sdk/provider";
|
|
9
|
+
import { nsToMs, pickDefined } from "@holokai/holo-sdk";
|
|
10
|
+
import { FinishReason } from "@holokai/holo-types/entities";
|
|
10
11
|
import { OllamaProtocols } from "./plugin";
|
|
11
12
|
let OllamaAuditor = class OllamaAuditor extends BaseAuditor {
|
|
12
13
|
provider = 'ollama';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const chatPayload = payload;
|
|
18
|
-
const userPrompt = this.extractUserPromptFromMessages(chatPayload.messages);
|
|
19
|
-
const systemPrompt = this.extractSystemPromptFromMessages(chatPayload.messages);
|
|
20
|
-
if (userPrompt !== undefined) {
|
|
21
|
-
llmRequest.metadata.user_prompt = userPrompt;
|
|
22
|
-
}
|
|
23
|
-
if (systemPrompt !== undefined) {
|
|
24
|
-
llmRequest.metadata.system_prompt = systemPrompt;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
else if (workerRequest.protocol.name === OllamaProtocols.GENERATE) {
|
|
28
|
-
const generatePayload = payload;
|
|
29
|
-
if (generatePayload.prompt !== undefined) {
|
|
30
|
-
llmRequest.metadata.user_prompt = generatePayload.prompt;
|
|
31
|
-
}
|
|
32
|
-
if (generatePayload.system !== undefined) {
|
|
33
|
-
llmRequest.metadata.system_prompt = generatePayload.system;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
14
|
+
async extractRequestOptions(workerRequest) {
|
|
15
|
+
return {
|
|
16
|
+
...workerRequest.payload.options
|
|
17
|
+
};
|
|
36
18
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
19
|
+
mapFinishReason(nativeResponse, _protocolName) {
|
|
20
|
+
if (!nativeResponse)
|
|
21
|
+
return 'stop';
|
|
22
|
+
const doneReason = nativeResponse.done_reason;
|
|
23
|
+
switch (doneReason) {
|
|
24
|
+
case 'stop':
|
|
25
|
+
return 'stop';
|
|
26
|
+
case 'load':
|
|
27
|
+
return 'error';
|
|
28
|
+
case 'length':
|
|
29
|
+
return 'length';
|
|
30
|
+
default:
|
|
31
|
+
return 'stop';
|
|
41
32
|
}
|
|
42
33
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
output_tokens: payload.eval_count || metrics.output_tokens,
|
|
52
|
-
time_to_first_token: this.calculateTimeToFirstToken(payload) || metrics.time_to_first_token,
|
|
53
|
-
total_processing_time: payload.total_duration ? Math.round(payload.total_duration / 1000000) : metrics.total_processing_time
|
|
54
|
-
};
|
|
55
|
-
return pickDefined({
|
|
56
|
-
usage_raw: usage,
|
|
57
|
-
...usage
|
|
34
|
+
mapUsage(nativeResponse, _protocolName) {
|
|
35
|
+
if (!nativeResponse)
|
|
36
|
+
return {};
|
|
37
|
+
const { prompt_eval_count, eval_count, load_duration, prompt_eval_duration, total_duration } = nativeResponse;
|
|
38
|
+
const usage = pickDefined({
|
|
39
|
+
input_tokens: prompt_eval_count,
|
|
40
|
+
output_tokens: eval_count,
|
|
41
|
+
total_tokens: (eval_count ?? 0) + (prompt_eval_count ?? 0) || undefined,
|
|
58
42
|
});
|
|
43
|
+
if (load_duration != null || total_duration != null) {
|
|
44
|
+
const timings = {};
|
|
45
|
+
if (total_duration != null)
|
|
46
|
+
timings.total = Math.round(nsToMs(total_duration));
|
|
47
|
+
if (load_duration != null)
|
|
48
|
+
timings.load = Math.round(nsToMs(load_duration));
|
|
49
|
+
if (prompt_eval_duration != null)
|
|
50
|
+
timings.prompt_eval = Math.round(nsToMs(prompt_eval_duration));
|
|
51
|
+
usage.timings = timings;
|
|
52
|
+
}
|
|
53
|
+
return usage;
|
|
59
54
|
}
|
|
60
|
-
async
|
|
55
|
+
async mapProviderResponseMetrics(providerEvent) {
|
|
56
|
+
const payload = providerEvent.message;
|
|
57
|
+
const { load_duration, eval_count, prompt_eval_count, prompt_eval_duration, total_duration } = payload;
|
|
61
58
|
return pickDefined({
|
|
62
|
-
|
|
59
|
+
input_tokens: prompt_eval_count,
|
|
60
|
+
output_tokens: eval_count,
|
|
61
|
+
total_tokens: (eval_count ?? 0) + (prompt_eval_count ?? 0) || undefined,
|
|
62
|
+
time_to_first_token: load_duration != null && prompt_eval_duration != null ? Math.round(nsToMs(load_duration + prompt_eval_duration)) : undefined,
|
|
63
|
+
total_processing_time: total_duration != null ? Math.round(nsToMs(total_duration)) : undefined,
|
|
64
|
+
usage_raw: {
|
|
65
|
+
load_duration,
|
|
66
|
+
prompt_eval_duration,
|
|
67
|
+
total_duration,
|
|
68
|
+
eval_count,
|
|
69
|
+
prompt_eval_count
|
|
70
|
+
},
|
|
71
|
+
metadata: {
|
|
72
|
+
load_duration,
|
|
73
|
+
prompt_eval_duration
|
|
74
|
+
}
|
|
63
75
|
});
|
|
64
76
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (!messages || !Array.isArray(messages))
|
|
70
|
-
return undefined;
|
|
71
|
-
const userMessages = messages.filter(msg => msg.role === 'user');
|
|
72
|
-
if (userMessages.length === 0)
|
|
73
|
-
return undefined;
|
|
74
|
-
// Return the last user message content
|
|
75
|
-
const lastUserMessage = userMessages[userMessages.length - 1];
|
|
76
|
-
return typeof lastUserMessage.content === 'string' ? lastUserMessage.content : undefined;
|
|
77
|
-
}
|
|
78
|
-
extractSystemPromptFromMessages(messages) {
|
|
79
|
-
if (!messages || !Array.isArray(messages))
|
|
77
|
+
async extractFinishReason(providerEvent, _envelope) {
|
|
78
|
+
if (providerEvent.type === 'error')
|
|
79
|
+
return FinishReason.ERROR;
|
|
80
|
+
if (providerEvent.type !== 'done')
|
|
80
81
|
return undefined;
|
|
81
|
-
|
|
82
|
-
return systemMessage && typeof systemMessage.content === 'string' ? systemMessage.content : undefined;
|
|
82
|
+
return this.mapFinishReason(providerEvent.message);
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const loadDuration = payload.load_duration;
|
|
93
|
-
const promptEvalDuration = payload.prompt_eval_duration;
|
|
94
|
-
if (loadDuration !== undefined && promptEvalDuration !== undefined) {
|
|
95
|
-
// Convert nanoseconds to milliseconds and sum the durations
|
|
96
|
-
const timeToFirstTokenNs = loadDuration + promptEvalDuration;
|
|
97
|
-
return Math.round(timeToFirstTokenNs / 1000000);
|
|
84
|
+
async createProviderEnvelope(workerRequest) {
|
|
85
|
+
const payload = workerRequest.payload;
|
|
86
|
+
let last_user_prompt;
|
|
87
|
+
let system_prompt;
|
|
88
|
+
if (workerRequest.protocol.name === OllamaProtocols.GENERATE) {
|
|
89
|
+
const generatePayload = payload;
|
|
90
|
+
last_user_prompt = normalizeText(generatePayload.prompt);
|
|
91
|
+
system_prompt = generatePayload.system ? normalizeText(generatePayload.system) : generatePayload.system;
|
|
98
92
|
}
|
|
99
|
-
|
|
93
|
+
else {
|
|
94
|
+
const chatPayload = payload;
|
|
95
|
+
last_user_prompt = extractPromptByRole(chatPayload.messages, "user", "last", (msg) => extractTextContent(msg.content));
|
|
96
|
+
system_prompt = extractPromptByRole(chatPayload.messages, "system", "first", (msg) => extractTextContent(msg.content));
|
|
97
|
+
}
|
|
98
|
+
return pickDefined({
|
|
99
|
+
access_model: payload.model,
|
|
100
|
+
last_user_prompt,
|
|
101
|
+
system_prompt
|
|
102
|
+
});
|
|
100
103
|
}
|
|
101
104
|
};
|
|
102
105
|
OllamaAuditor = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.auditor.js","sourceRoot":"","sources":["../src/ollama.auditor.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,WAAW,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"ollama.auditor.js","sourceRoot":"","sources":["../src/ollama.auditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { ChatRequest, EmbedRequest, ErrorResponse, GenerateRequest, ListResponse, Ollama } from 'ollama';
|
|
2
|
-
import { BaseProvider } from '@holokai/sdk/provider';
|
|
3
|
-
import type { IAuditor, IProviderTranslator, IResponseFactory, ProviderContext, RunHandle } from '@holokai/types/provider';
|
|
4
|
-
export declare class OllamaProvider extends BaseProvider<Ollama, GenerateRequest | ChatRequest> {
|
|
5
|
-
getModelNameFromRequest(payload: GenerateRequest | ChatRequest): Promise<string>;
|
|
2
|
+
import { BaseProvider } from '@holokai/holo-sdk/provider';
|
|
3
|
+
import type { DiscoveredModel, IAuditor, IProviderTranslator, IResponseFactory, ProviderContext, RunHandle } from '@holokai/holo-types/provider';
|
|
4
|
+
export declare class OllamaProvider extends BaseProvider<Ollama, EmbedRequest | GenerateRequest | ChatRequest> {
|
|
5
|
+
getModelNameFromRequest(payload: EmbedRequest | GenerateRequest | ChatRequest): Promise<string>;
|
|
6
|
+
discoverModels(): Promise<DiscoveredModel[]>;
|
|
6
7
|
getModels(allowedModels: string[] | true): Promise<ListResponse>;
|
|
7
|
-
ollamaEmbed(payload: EmbedRequest
|
|
8
|
-
|
|
8
|
+
ollamaEmbed(payload: EmbedRequest): Promise<{
|
|
9
|
+
start: () => Promise<import("ollama").EmbedResponse>;
|
|
9
10
|
}>;
|
|
10
11
|
protected createAuditor(): IAuditor;
|
|
11
12
|
protected createClient(): Ollama;
|
|
12
13
|
protected createTranslator(): IProviderTranslator;
|
|
13
14
|
protected createResponseFactory(): IResponseFactory;
|
|
14
15
|
protected handleError(error: Error): Promise<ErrorResponse>;
|
|
15
|
-
protected
|
|
16
|
+
protected createRequestRunner(payload: GenerateRequest | ChatRequest | EmbedRequest, ctx: ProviderContext): Promise<RunHandle<any>>;
|
|
16
17
|
private ollamaGenerate;
|
|
18
|
+
private emitOllamaToolCalls;
|
|
17
19
|
private ollamaChat;
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=ollama.provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.provider.d.ts","sourceRoot":"","sources":["../src/ollama.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAC,MAAM,QAAQ,CAAC;AACvG,OAAO,EAAC,YAAY,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"ollama.provider.d.ts","sourceRoot":"","sources":["../src/ollama.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAC,MAAM,QAAQ,CAAC;AACvG,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EACR,eAAe,EACf,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,SAAS,EACZ,MAAM,8BAA8B,CAAC;AAMtC,qBAAa,cAAe,SAAQ,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,WAAW,CAAC;IAE5F,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/F,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAoB5C,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAchE,WAAW,CAAC,OAAO,EAAE,YAAY;;;IAQvC,SAAS,CAAC,aAAa,IAAI,QAAQ;IAInC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAIjD,SAAS,CAAC,qBAAqB,IAAI,gBAAgB;cAInC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;cAIjD,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,GAAG,YAAY,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAY3H,cAAc;IA4B5B,OAAO,CAAC,mBAAmB;YAUb,UAAU;CA0C3B"}
|
package/dist/ollama.provider.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Ollama } from 'ollama';
|
|
2
|
-
import { BaseProvider } from '@holokai/sdk/provider';
|
|
2
|
+
import { BaseProvider } from '@holokai/holo-sdk/provider';
|
|
3
3
|
import { OllamaAuditor } from './ollama.auditor';
|
|
4
4
|
import { OllamaTranslator } from './ollama.translator';
|
|
5
5
|
import { OllamaResponseFactory } from './ollama.response.factory';
|
|
@@ -8,6 +8,25 @@ export class OllamaProvider extends BaseProvider {
|
|
|
8
8
|
async getModelNameFromRequest(payload) {
|
|
9
9
|
return payload.model;
|
|
10
10
|
}
|
|
11
|
+
async discoverModels() {
|
|
12
|
+
const response = await this.client.list();
|
|
13
|
+
return response.models.map(m => {
|
|
14
|
+
const name = m.name;
|
|
15
|
+
const modelName = name.split(':')[0];
|
|
16
|
+
return {
|
|
17
|
+
name,
|
|
18
|
+
accessModel: name,
|
|
19
|
+
description: `${modelName} (Model ID: ${name})`,
|
|
20
|
+
version: name.match(/-(\d+\.\d+(?:\.\d+)?)/)?.[1] ?? '1.0',
|
|
21
|
+
metadata: {
|
|
22
|
+
name: m.name,
|
|
23
|
+
size: m.size,
|
|
24
|
+
digest: m.digest,
|
|
25
|
+
details: m.details,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
}
|
|
11
30
|
async getModels(allowedModels) {
|
|
12
31
|
const response = await this.client.list();
|
|
13
32
|
if (allowedModels === true) {
|
|
@@ -19,16 +38,10 @@ export class OllamaProvider extends BaseProvider {
|
|
|
19
38
|
models
|
|
20
39
|
};
|
|
21
40
|
}
|
|
22
|
-
async ollamaEmbed(payload
|
|
41
|
+
async ollamaEmbed(payload) {
|
|
23
42
|
return {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return await this.client.embed(payload);
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
this.log.error(`Ollama embed error: ${error instanceof Error ? error.message : String(error)}`);
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
43
|
+
start: async () => {
|
|
44
|
+
return await this.client.embed(payload);
|
|
32
45
|
}
|
|
33
46
|
};
|
|
34
47
|
}
|
|
@@ -47,36 +60,29 @@ export class OllamaProvider extends BaseProvider {
|
|
|
47
60
|
async handleError(error) {
|
|
48
61
|
return { error: error.message };
|
|
49
62
|
}
|
|
50
|
-
async
|
|
63
|
+
async createRequestRunner(payload, ctx) {
|
|
51
64
|
switch (ctx.protocol.name) {
|
|
52
65
|
case OllamaProtocols.GENERATE:
|
|
53
66
|
return this.ollamaGenerate(payload, ctx);
|
|
54
67
|
case OllamaProtocols.CHAT:
|
|
55
68
|
return this.ollamaChat(payload, ctx);
|
|
56
69
|
case OllamaProtocols.EMBED:
|
|
57
|
-
return this.ollamaEmbed(payload
|
|
70
|
+
return this.ollamaEmbed(payload);
|
|
58
71
|
}
|
|
59
72
|
throw new Error(`Unsupported requestType: ${JSON.stringify(ctx)}`);
|
|
60
73
|
}
|
|
61
74
|
async ollamaGenerate(request, ctx) {
|
|
62
75
|
if (!request.stream) {
|
|
63
76
|
return {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
catch (error) {
|
|
69
|
-
this.log.error(`Ollama generate error: ${error instanceof Error ? error.message : String(error)}`, {
|
|
70
|
-
config: JSON.stringify(this._config),
|
|
71
|
-
request: JSON.stringify(request)
|
|
72
|
-
});
|
|
73
|
-
throw error;
|
|
74
|
-
}
|
|
77
|
+
start: async () => {
|
|
78
|
+
const result = await this.client.generate({ ...request, stream: false /* ensure */ });
|
|
79
|
+
ctx.emitTextDelta(result.response);
|
|
80
|
+
return result;
|
|
75
81
|
},
|
|
76
82
|
};
|
|
77
83
|
}
|
|
78
84
|
return {
|
|
79
|
-
|
|
85
|
+
start: async () => {
|
|
80
86
|
const streamResp = await this.client.generate({ ...request, stream: true });
|
|
81
87
|
for await (const chunk of streamResp) {
|
|
82
88
|
if (chunk.done)
|
|
@@ -90,30 +96,46 @@ export class OllamaProvider extends BaseProvider {
|
|
|
90
96
|
}
|
|
91
97
|
};
|
|
92
98
|
}
|
|
99
|
+
emitOllamaToolCalls(toolCalls, ctx) {
|
|
100
|
+
for (let i = 0; i < toolCalls.length; i++) {
|
|
101
|
+
const fn = toolCalls[i].function;
|
|
102
|
+
if (!fn)
|
|
103
|
+
continue;
|
|
104
|
+
const argsStr = typeof fn.arguments === 'string' ? fn.arguments : JSON.stringify(fn.arguments);
|
|
105
|
+
ctx.emitToolCallDelta(i, { name: fn.name });
|
|
106
|
+
ctx.emitToolCallDelta(i, { arguments_delta: argsStr });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
93
109
|
async ollamaChat(request, ctx) {
|
|
94
110
|
if (!request.stream) {
|
|
95
111
|
return {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
this.log.error(`Ollama chat error: ${error instanceof Error ? error.message : String(error)}`, {
|
|
102
|
-
config: JSON.stringify(this._config),
|
|
103
|
-
request: JSON.stringify(request)
|
|
104
|
-
});
|
|
105
|
-
throw error;
|
|
112
|
+
start: async () => {
|
|
113
|
+
const result = await this.client.chat({ ...request, stream: false });
|
|
114
|
+
ctx.emitTextDelta(result.message.content);
|
|
115
|
+
if (result.message.tool_calls?.length) {
|
|
116
|
+
this.emitOllamaToolCalls(result.message.tool_calls, ctx);
|
|
106
117
|
}
|
|
118
|
+
return result;
|
|
107
119
|
},
|
|
108
120
|
};
|
|
109
121
|
}
|
|
110
122
|
return {
|
|
111
|
-
|
|
123
|
+
start: async () => {
|
|
112
124
|
const streamResp = await this.client.chat({ ...request, stream: true });
|
|
113
125
|
for await (const chunk of streamResp) {
|
|
114
|
-
if (chunk.done)
|
|
126
|
+
if (chunk.done) {
|
|
127
|
+
const finalToken = chunk.message?.content ?? '';
|
|
128
|
+
if (finalToken)
|
|
129
|
+
ctx.emitTextDelta(finalToken);
|
|
130
|
+
if (chunk.message?.tool_calls?.length) {
|
|
131
|
+
this.emitOllamaToolCalls(chunk.message.tool_calls, ctx);
|
|
132
|
+
}
|
|
115
133
|
return chunk;
|
|
134
|
+
}
|
|
116
135
|
ctx.emitStreamEvent(chunk);
|
|
136
|
+
if (chunk.message?.tool_calls?.length) {
|
|
137
|
+
this.emitOllamaToolCalls(chunk.message.tool_calls, ctx);
|
|
138
|
+
}
|
|
117
139
|
const token = chunk.message.content ?? '';
|
|
118
140
|
if (token)
|
|
119
141
|
ctx.emitTextDelta(token);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.provider.js","sourceRoot":"","sources":["../src/ollama.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0E,MAAM,EAAC,MAAM,QAAQ,CAAC;AACvG,OAAO,EAAC,YAAY,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"ollama.provider.js","sourceRoot":"","sources":["../src/ollama.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IResponseFactory } from "@holokai/types/provider";
|
|
1
|
+
import type { IResponseFactory } from "@holokai/holo-types/provider";
|
|
2
2
|
import { ErrorResponse } from "ollama";
|
|
3
3
|
export declare class OllamaResponseFactory implements IResponseFactory {
|
|
4
4
|
static instance(): OllamaResponseFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.response.factory.d.ts","sourceRoot":"","sources":["../src/ollama.response.factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"ollama.response.factory.d.ts","sourceRoot":"","sources":["../src/ollama.response.factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,QAAQ,CAAC;AAErC,qBAAa,qBAAsB,YAAW,gBAAgB;IAC1D,MAAM,CAAC,QAAQ,IAAI,qBAAqB;IAIxC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa;CAG9C"}
|