node-red-contrib-ollama 0.1.10 → 0.2.2

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.
@@ -3,7 +3,8 @@
3
3
  category: 'AI',
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
- name: { value: '' },
6
+ name: { value: 'Ollama Generate' },
7
+ server: { value: '', type: 'ollama-config-server', required: false }
7
8
  },
8
9
  inputs: 1,
9
10
  outputs: 1,
@@ -19,6 +20,11 @@
19
20
  <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
20
21
  <input type="text" id="node-input-name" placeholder="Name" />
21
22
  </div>
23
+
24
+ <div class="form-row">
25
+ <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
+ <input type="text" id="node-input-server" />
27
+ </div>
22
28
  </script>
23
29
 
24
30
  <script type="text/html" data-help-name="ollama-generate">
@@ -27,279 +33,81 @@
27
33
  <h3>Inputs</h3>
28
34
 
29
35
  <dl class="message-properties">
30
- <dt>
31
- payload.host
32
-
33
- <span class="property-type">string</span>
34
- </dt>
35
- <dd>The host of the Ollama instance.</dd>
36
-
37
- <dt>
38
- payload.model
39
-
40
- <span class="property-type">string</span>
41
- </dt>
42
- <dd>The model to use for generating the next message.</dd>
43
-
44
- <dt>
45
- payload.prompt
46
-
47
- <span class="property-type">string</span>
48
- </dt>
49
- <dd>The prompt to generate a response for.</dd>
50
-
51
36
  <dt class="optional">
52
- payload.images
53
-
54
- <span class="property-type">array</span>
37
+ payload <span class="property-type">object</span>
55
38
  </dt>
56
- <dd>Images to be included, either as Uint8Array or base64 encoded strings.</dd>
57
-
58
- <dt class="optional">
59
- payload.system
60
39
 
61
- <span class="property-type">string</span>
62
- </dt>
63
- <dd>Override the model system prompt.</dd>
64
-
65
- <dt class="optional">
66
- payload.template
67
-
68
- <span class="property-type">string</span>
69
- </dt>
70
- <dd>Override the model template.</dd>
71
-
72
- <dt class="optional">
73
- payload.raw
74
-
75
- <span class="property-type">boolean</span>
76
- </dt>
77
- <dd>Bypass the prompt template and pass the prompt directly to the model.</dd>
78
-
79
- <dt class="optional">
80
- payload.format
81
-
82
- <span class="property-type">string</span>
83
- </dt>
84
- <dd>Set the expected format of the response (<code>json</code>).</dd>
85
-
86
- <dt class="optional">
87
- payload.stream
88
-
89
- <span class="property-type">boolean</span>
90
- </dt>
91
- <dd>When true an AsyncGenerator is returned.</dd>
92
-
93
- <dt class="optional">
94
- payload.keep_alive
95
-
96
- <span class="property-type">string | number</span>
97
- </dt>
98
- <dd>How long to keep the model loaded.</dd>
99
-
100
- <dt class="optional">
101
- payload.options
102
-
103
- <span class="property-type">object</span>
104
- </dt>
105
40
  <dd>
106
- Options to configure the runtime.<br />
41
+ The payload object.
107
42
 
108
- <h4>Options</h4>
109
43
  <dl class="message-properties">
110
- <dt>
111
- numa
112
-
113
- <span class="property-type">boolean</span>
114
- </dt>
115
- <dd>Use NUMA for the runtime.</dd>
116
-
117
- <dt>
118
- num_ctx
119
-
120
- <span class="property-type">number</span>
121
- </dt>
122
- <dd>The number of contexts to use.</dd>
123
-
124
- <dt>
125
- num_batch
126
-
127
- <span class="property-type">number</span>
128
- </dt>
129
- <dd>The number of batches to use.</dd>
130
-
131
- <dt>
132
- main_gpu
133
-
134
- <span class="property-type">number</span>
135
- </dt>
136
- <dd>The main GPU to use.</dd>
137
-
138
- <dt>
139
- low_vram
140
-
141
- <span class="property-type">boolean</span>
44
+ <dt class="optional">
45
+ payload.host <span class="property-type">string</span>
142
46
  </dt>
143
- <dd>Use low VRAM.</dd>
47
+ <dd>
48
+ The host of the Ollama instance.<br />
49
+ <em>Alternative to the <code>Server</code> field.</em>
50
+ </dd>
144
51
 
145
52
  <dt>
146
- f16_kv
147
-
148
- <span class="property-type">boolean</span>
53
+ payload.model <span class="property-type">string</span>
149
54
  </dt>
150
- <dd>Use f16 key-value.</dd>
55
+ <dd>The model to use for generating the next message.</dd>
151
56
 
152
57
  <dt>
153
- logits_all
154
-
155
- <span class="property-type">boolean</span>
58
+ payload.prompt <span class="property-type">string</span>
156
59
  </dt>
157
- <dd>Return all logits.</dd>
60
+ <dd>The prompt to generate a response for.</dd>
158
61
 
159
62
  <dt>
160
- vocab_only
161
-
162
- <span class="property-type">boolean</span>
63
+ payload.suffix <span class="property-type">string</span>
163
64
  </dt>
164
- <dd>Return only the vocabulary.</dd>
65
+ <dd>The text after the model response.</dd>
165
66
 
166
- <dt>
167
- use_nmap
168
-
169
- <span class="property-type">boolean</span>
67
+ <dt class="optional">
68
+ payload.images <span class="property-type">array</span>
170
69
  </dt>
171
- <dd>Use NMAP.</dd>
172
-
173
- <dt>
174
- use_mlock
70
+ <dd>A list of base64-encoded images (for multimodal models such as <code>llava</code>)</dd>
175
71
 
176
- <span class="property-type">boolean</span>
72
+ <dt class="optional">
73
+ payload.format <span class="property-type">string</span>
177
74
  </dt>
178
- <dd>Use mlock.</dd>
75
+ <dd>The format to return a response in. Currently the only accepted value is <code>json</code></dd>
179
76
 
180
- <dt>
181
- embedding_only
182
-
183
- <span class="property-type">boolean</span>
77
+ <dt class="optional">
78
+ payload.options <span class="property-type">object</span>
184
79
  </dt>
185
- <dd>Return only the embeddings.</dd>
80
+ <dd>
81
+ Additional model parameters listed in the documentation for the <a href="https://github.com/ollama/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">Modelfile</a>.
82
+ </dd>
186
83
 
187
- <dt>
188
- num_thread
189
-
190
- <span class="property-type">number</span>
84
+ <dt class="optional">
85
+ payload.system <span class="property-type">string</span>
191
86
  </dt>
192
- <dd>The number of threads to use.</dd>
87
+ <dd>System message to (overrides what is defined in the <code>Modelfile</code>)</dd>
193
88
 
194
- <dt>
195
- num_keep
196
-
197
- <span class="property-type">number</span>
89
+ <dt class="optional">
90
+ payload.template <span class="property-type">string</span>
198
91
  </dt>
199
- <dd>The number of models to keep.</dd>
200
-
201
- <dt>
202
- seed
92
+ <dd>The prompt template to use (overrides what is defined in the <code>Modelfile</code>)</dd>
203
93
 
204
- <span class="property-type">number</span>
94
+ <dt class="optional">
95
+ payload.stream <span class="property-type">boolean</span>
205
96
  </dt>
206
- <dd>The seed to use.</dd>
207
-
208
- <dt>
209
- num_predict
210
-
211
- <span class="property-type">number</span>
212
- </dt>
213
- <dd>The number of predictions to use.</dd>
214
-
215
- <dt>
216
- top_k
217
-
218
- <span class="property-type">number</span>
219
- </dt>
220
- <dd>The top k to use.</dd>
221
-
222
- <dt>
223
- top_p
224
-
225
- <span class="property-type">number</span>
226
- </dt>
227
- <dd>The top p to use.</dd>
228
-
229
- <dt>
230
- typical_p
231
-
232
- <span class="property-type">number</span>
233
- </dt>
234
- <dd>The typical p to use.</dd>
235
-
236
- <dt>
237
- repeat_last_n
97
+ <dd>If <code>false</code> the response will be returned as a single response object, rather than a stream of objects.</dd>
238
98
 
239
- <span class="property-type">number</span>
99
+ <dt class="optional">
100
+ payload.raw <span class="property-type">boolean</span>
240
101
  </dt>
241
- <dd>The repeat last n to use.</dd>
242
-
243
- <dt>
244
- temperature
245
-
246
- <span class="property-type">number</span>
247
- </dt>
248
- <dd>The temperature to use.</dd>
249
-
250
- <dt>
251
- repeat_pentalty
252
-
253
- <span class="property-type">number</span>
254
- </dt>
255
- <dd>The repeat pentalty to use.</dd>
256
-
257
- <dt>
258
- presence_penalty
259
-
260
- <span class="property-type">number</span>
261
- </dt>
262
- <dd>The presence penalty to use.</dd>
263
-
264
- <dt>
265
- frequency_penalty
266
-
267
- <span class="property-type">number</span>
268
- </dt>
269
- <dd>The frequency penalty to use.</dd>
270
-
271
- <dt>
272
- mirostat
273
-
274
- <span class="property-type">boolean</span>
275
- </dt>
276
- <dd>Use mirostat.</dd>
277
-
278
- <dt>
279
- mirostat_tau
280
-
281
- <span class="property-type">number</span>
282
- </dt>
283
-
284
- <dt>
285
- mirostat_eta
286
-
287
- <span class="property-type">number</span>
288
- </dt>
289
-
290
- <dt>
291
- penalize_newline
292
-
293
- <span class="property-type">boolean</span>
294
- </dt>
295
- <dd>Penalize newline.</dd>
296
-
297
- <dt>
298
- stop
102
+ <dd>
103
+ If <code>true</code> no formatting will be applied to the prompt.<br />
104
+ You may choose to use the <code>raw</code> parameter if you are specifying a full templated prompt in your request to the API.
105
+ </dd>
299
106
 
300
- <span class="property-type">array</span>
107
+ <dt class="optional">
108
+ payload.keep_alive <span class="property-type">string | number</span>
301
109
  </dt>
302
- <dd>The stop to use.</dd>
110
+ <dd>Controls how long the model will stay loaded into memory following the request (default: <code>5m</code>)</dd>
303
111
  </dl>
304
112
  </dd>
305
113
  </dl>
@@ -6,14 +6,43 @@ module.exports = function( RED ) {
6
6
  const node = this
7
7
 
8
8
  node.on( 'input', async function( msg ) {
9
- const { host, model, prompt, images, format, options, system, template, context, stream, raw, keep_alive } = msg.payload
9
+ const {
10
+ host: payloadHost,
11
+ model,
12
+ prompt,
13
+ suffix,
14
+ system,
15
+ template,
16
+ raw,
17
+ images,
18
+ format,
19
+ stream,
20
+ keep_alive,
21
+ options
22
+ } = msg.payload
23
+
24
+ const server = RED.nodes.getNode( config.server )
25
+
26
+ const host = ( server ) ? server.host + ':' + server.port : payloadHost
10
27
 
11
28
  const ollama = new Ollama( { host } )
12
29
 
13
- const response = await ollama.generate( { model, prompt, images, format, options, system, template, context, stream, raw, keep_alive } )
14
- .catch( error => {
15
- node.error( error )
16
- } )
30
+ const response = await ollama.generate( {
31
+ model,
32
+ prompt,
33
+ suffix,
34
+ system,
35
+ template,
36
+ raw,
37
+ images,
38
+ format,
39
+ stream,
40
+ keep_alive,
41
+ options
42
+ } )
43
+ .catch( error => {
44
+ node.error( error )
45
+ } )
17
46
 
18
47
  msg.payload = response
19
48
  node.send( msg )
@@ -3,7 +3,8 @@
3
3
  category: 'AI',
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
- name: { value: '' },
6
+ name: { value: 'Ollama List Local Models' },
7
+ server: { value: '', type: 'ollama-config-server', required: false }
7
8
  },
8
9
  inputs: 1,
9
10
  outputs: 1,
@@ -19,6 +20,11 @@
19
20
  <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
20
21
  <input type="text" id="node-input-name" placeholder="Name" />
21
22
  </div>
23
+
24
+ <div class="form-row">
25
+ <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
+ <input type="text" id="node-input-server" />
27
+ </div>
22
28
  </script>
23
29
 
24
30
  <script type="text/html" data-help-name="ollama-list">
@@ -27,12 +33,23 @@
27
33
  <h3>Inputs</h3>
28
34
 
29
35
  <dl class="message-properties">
30
- <dt>
31
- payload.host
32
-
33
- <span class="property-type">string</span>
36
+ <dt class="optional">
37
+ payload <span class="property-type">object</span>
34
38
  </dt>
35
- <dd>The host of the Ollama instance.</dd>
39
+
40
+ <dd>
41
+ The payload object.
42
+
43
+ <dl class="message-properties">
44
+ <dt class="optional">
45
+ payload.host <span class="property-type">string</span>
46
+ </dt>
47
+ <dd>
48
+ The host of the Ollama instance.<br />
49
+ <em>Alternative to the <code>Server</code> field.</em>
50
+ </dd>
51
+ </dl>
52
+ </dd>
36
53
  </dl>
37
54
 
38
55
  <h3>Outputs</h3>
@@ -86,13 +103,6 @@
86
103
 
87
104
  <h5>Details</h5>
88
105
  <dl class="message-properties">
89
- <dt>
90
- parent_model
91
-
92
- <span class="property-type">string</span>
93
- </dt>
94
- <dd>The parent model of the model.</dd>
95
-
96
106
  <dt>
97
107
  format
98
108
 
@@ -6,7 +6,13 @@ module.exports = function( RED ) {
6
6
  const node = this
7
7
 
8
8
  node.on( 'input', async function( msg ) {
9
- const { host } = msg.payload
9
+ const {
10
+ host: payloadHost
11
+ } = msg.payload
12
+
13
+ const server = RED.nodes.getNode( config.server )
14
+
15
+ const host = ( server ) ? server.host + ':' + server.port : payloadHost
10
16
 
11
17
  const ollama = new Ollama( { host } )
12
18
 
@@ -0,0 +1,153 @@
1
+ <script type="text/javascript">
2
+ RED.nodes.registerType( 'ollama-ps', {
3
+ category: 'AI',
4
+ color: 'rgb(186 230 253)',
5
+ defaults: {
6
+ name: { value: 'Ollama List Running Models' },
7
+ server: { value: '', type: 'ollama-config-server', required: false }
8
+ },
9
+ inputs: 1,
10
+ outputs: 1,
11
+ icon: 'ollama.png',
12
+ label: function() {
13
+ return this.name || 'ollama-ps';
14
+ },
15
+ } )
16
+ </script>
17
+
18
+ <script type="text/html" data-template-name="ollama-ps">
19
+ <div class="form-row">
20
+ <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
21
+ <input type="text" id="node-input-name" placeholder="Name" />
22
+ </div>
23
+
24
+ <div class="form-row">
25
+ <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
+ <input type="text" id="node-input-server" />
27
+ </div>
28
+ </script>
29
+
30
+ <script type="text/html" data-help-name="ollama-ps">
31
+ <p>List models that are currently loaded into memory.</p>
32
+
33
+ <h3>Inputs</h3>
34
+
35
+ <dl class="message-properties">
36
+ <dt class="optional">
37
+ payload <span class="property-type">object</span>
38
+ </dt>
39
+
40
+ <dd>
41
+ The payload object.
42
+
43
+ <dl class="message-properties">
44
+ <dt class="optional">
45
+ payload.host <span class="property-type">string</span>
46
+ </dt>
47
+ <dd>
48
+ The host of the Ollama instance.<br />
49
+ <em>Alternative to the <code>Server</code> field.</em>
50
+ </dd>
51
+ </dl>
52
+ </dd>
53
+ </dl>
54
+
55
+ <h3>Outputs</h3>
56
+
57
+ <dl class="message-properties">
58
+ <dt>
59
+ payload.models
60
+
61
+ <span class="property-type">array</span>
62
+ </dt>
63
+ <dd>
64
+ The list of models that are available locally.<br />
65
+
66
+ <h4>Model</h4>
67
+ <dl class="message-properties">
68
+ <dt>
69
+ name
70
+
71
+ <span class="property-type">string</span>
72
+ </dt>
73
+
74
+ <dt>
75
+ model
76
+
77
+ <span class="property-type">string</span>
78
+ </dt>
79
+
80
+ <dt>
81
+ size
82
+
83
+ <span class="property-type">number</span>
84
+ </dt>
85
+
86
+ <dt>
87
+ digest
88
+
89
+ <span class="property-type">string</span>
90
+ </dt>
91
+
92
+ <dt>
93
+ expires_at
94
+
95
+ <span class="property-type">Date</span>
96
+ </dt>
97
+
98
+ <dt>
99
+ size_vram
100
+
101
+ <span class="property-type">number</span>
102
+ </dt>
103
+
104
+ <dt>
105
+ details
106
+
107
+ <span class="property-type">object</span>
108
+ </dt>
109
+ <dd>
110
+ The details of the model.<br />
111
+
112
+ <h5>Details</h5>
113
+ <dl class="message-properties">
114
+ <dt>
115
+ parent_model
116
+
117
+ <span class="property-type">string</span>
118
+ </dt>
119
+
120
+ <dt>
121
+ format
122
+
123
+ <span class="property-type">string</span>
124
+ </dt>
125
+
126
+ <dt>
127
+ family
128
+
129
+ <span class="property-type">string</span>
130
+ </dt>
131
+
132
+ <dt>
133
+ families
134
+
135
+ <span class="property-type">array</span>
136
+ </dt>
137
+
138
+ <dt>
139
+ parameter_size
140
+
141
+ <span class="property-type">string</span>
142
+ </dt>
143
+
144
+ <dt>
145
+ quiantization_level
146
+
147
+ <span class="property-type">string</span>
148
+ </dt>
149
+ </dl>
150
+ </dd>
151
+ </dl>
152
+ </dd>
153
+ </script>
@@ -1,16 +1,22 @@
1
1
  module.exports = function( RED ) {
2
2
  const { Ollama } = require( 'ollama' )
3
3
 
4
- function OllamaEmbeddingsNode( config ) {
4
+ function OllamaPsNode( config ) {
5
5
  RED.nodes.createNode( this, config )
6
6
  const node = this
7
7
 
8
8
  node.on( 'input', async function( msg ) {
9
- const { host, model, prompt, options, keep_alive } = msg.payload
9
+ const {
10
+ host: payloadHost
11
+ } = msg.payload
12
+
13
+ const server = RED.nodes.getNode( config.server )
14
+
15
+ const host = ( server ) ? server.host + ':' + server.port : payloadHost
10
16
 
11
17
  const ollama = new Ollama( { host } )
12
18
 
13
- const response = await ollama.embeddings( { model, prompt, options, keep_alive } )
19
+ const response = await ollama.ps()
14
20
  .catch( error => {
15
21
  node.error( error )
16
22
  } )
@@ -20,5 +26,5 @@ module.exports = function( RED ) {
20
26
  } )
21
27
  }
22
28
 
23
- RED.nodes.registerType( 'ollama-embeddings', OllamaEmbeddingsNode )
29
+ RED.nodes.registerType( 'ollama-ps', OllamaPsNode )
24
30
  }