@zhivex-ai/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.
@@ -0,0 +1,15 @@
1
+ import { type CallableProviderAdapter, type ProviderAdapter } from "@zhivex-ai/core";
2
+ export interface OllamaProviderOptions {
3
+ baseURL?: string;
4
+ fetch?: typeof globalThis.fetch;
5
+ }
6
+ export interface OllamaLanguageModelOptions {
7
+ format?: "json" | Record<string, unknown> | string;
8
+ keep_alive?: string | number;
9
+ raw?: boolean;
10
+ template?: string;
11
+ options?: Record<string, unknown>;
12
+ [key: string]: unknown;
13
+ }
14
+ export declare const createOllama: (options?: OllamaProviderOptions) => CallableProviderAdapter & ProviderAdapter;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,uBAAuB,EAM5B,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA+ID,eAAO,MAAM,YAAY,GAAI,UAAS,qBAA0B,KAAG,uBAAuB,GAAG,eAQ5F,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,134 @@
1
+ import { ConfigurationError, ProviderHTTPError, ValidationError, createProviderAdapter, withRetry, withTimeoutSignal } from "@zhivex-ai/core";
2
+ const capabilities = {
3
+ streaming: false,
4
+ tools: false,
5
+ structuredOutput: false,
6
+ jsonMode: false,
7
+ toolChoice: false,
8
+ parallelToolCalls: false,
9
+ vision: true,
10
+ files: false,
11
+ audioInput: false,
12
+ audioOutput: false,
13
+ embeddings: false,
14
+ reasoning: false,
15
+ webSearch: false
16
+ };
17
+ const parseDataUrl = (value) => {
18
+ const match = value.match(/^data:(image\/[a-zA-Z0-9.+-]+);base64,(.+)$/);
19
+ if (!match) {
20
+ throw new ValidationError("Ollama image inputs must be provided as data URLs.");
21
+ }
22
+ return match[2];
23
+ };
24
+ const mapPrompt = (messages) => messages
25
+ .filter((message) => message.role !== "system")
26
+ .map((message) => {
27
+ const text = message.parts
28
+ .filter((part) => part.type === "text")
29
+ .map((part) => part.text)
30
+ .join("\n");
31
+ return `${message.role.toUpperCase()}: ${text}`;
32
+ })
33
+ .join("\n\n");
34
+ const systemPrompt = (messages) => messages
35
+ .filter((message) => message.role === "system")
36
+ .flatMap((message) => message.parts)
37
+ .filter((part) => part.type === "text")
38
+ .map((part) => part.text)
39
+ .join("\n");
40
+ const lastUserImages = (messages) => {
41
+ const lastUser = [...messages].reverse().find((message) => message.role === "user");
42
+ return (lastUser?.parts
43
+ .filter((part) => part.type === "image")
44
+ .map((part) => parseDataUrl(part.image)) ?? []);
45
+ };
46
+ const parseJson = async (response) => {
47
+ if (!response.ok) {
48
+ const body = await response.text();
49
+ throw new ProviderHTTPError(`Ollama request failed with status ${response.status}.`, response.status, {
50
+ responseBody: body
51
+ });
52
+ }
53
+ return response.json();
54
+ };
55
+ class OllamaLanguageModel {
56
+ modelId;
57
+ baseURL;
58
+ fetcher;
59
+ provider = "ollama";
60
+ capabilities = capabilities;
61
+ constructor(modelId, baseURL, fetcher) {
62
+ this.modelId = modelId;
63
+ this.baseURL = baseURL;
64
+ this.fetcher = fetcher;
65
+ }
66
+ async generate(input) {
67
+ const { signal, cleanup } = withTimeoutSignal(input);
68
+ try {
69
+ const response = await withRetry(() => this.fetcher(`${this.baseURL}/api/generate`, {
70
+ method: "POST",
71
+ headers: { "content-type": "application/json" },
72
+ signal,
73
+ body: JSON.stringify({
74
+ model: this.modelId,
75
+ system: systemPrompt(input.messages) || undefined,
76
+ prompt: mapPrompt(input.messages),
77
+ images: lastUserImages(input.messages),
78
+ options: {
79
+ num_predict: input.maxTokens,
80
+ temperature: input.temperature
81
+ },
82
+ stream: false,
83
+ ...input.providerOptions
84
+ })
85
+ }), input);
86
+ const json = await parseJson(response);
87
+ const text = json.response || "";
88
+ return {
89
+ messages: text
90
+ ? [
91
+ {
92
+ role: "assistant",
93
+ parts: [{ type: "text", text }]
94
+ }
95
+ ]
96
+ : [],
97
+ text,
98
+ finishReason: "stop",
99
+ providerFinishReason: json.done_reason,
100
+ usage: {
101
+ inputTokens: json.prompt_eval_count,
102
+ outputTokens: json.eval_count,
103
+ totalTokens: (json.prompt_eval_count ?? 0) + (json.eval_count ?? 0)
104
+ },
105
+ rawResponse: json
106
+ };
107
+ }
108
+ catch (error) {
109
+ if (error instanceof ProviderHTTPError) {
110
+ throw error;
111
+ }
112
+ const message = error instanceof Error ? error.message : "Ollama request failed.";
113
+ if (message.toLowerCase().includes("model") && message.toLowerCase().includes("not found")) {
114
+ throw new ValidationError(message, { cause: error });
115
+ }
116
+ if (message.toLowerCase().includes("connect") || message.toLowerCase().includes("econnrefused")) {
117
+ throw new ConfigurationError(message, { cause: error });
118
+ }
119
+ throw error instanceof Error ? error : new Error(message);
120
+ }
121
+ finally {
122
+ cleanup();
123
+ }
124
+ }
125
+ }
126
+ export const createOllama = (options = {}) => {
127
+ const baseURL = options.baseURL ?? process.env.OLLAMA_HOST ?? "http://localhost:11434";
128
+ const fetcher = options.fetch ?? globalThis.fetch;
129
+ return createProviderAdapter({
130
+ name: "ollama",
131
+ languageModel: (modelId) => new OllamaLanguageModel(modelId, baseURL, fetcher)
132
+ });
133
+ };
134
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@zhivex-ai/ollama",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": ["dist"],
15
+ "sideEffects": false,
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/Zhivex/zhivex-ai-sdk.git",
19
+ "directory": "packages/ollama"
20
+ },
21
+ "homepage": "https://github.com/Zhivex/zhivex-ai-sdk#readme",
22
+ "bugs": {
23
+ "url": "https://github.com/Zhivex/zhivex-ai-sdk/issues"
24
+ },
25
+ "keywords": ["ai", "sdk", "ollama", "local-llm", "typescript"],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "dependencies": {
30
+ "@zhivex-ai/core": "^0.1.0"
31
+ }
32
+ }