node-red-contrib-ollama 0.2.0 → 0.2.3

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 Abort' },
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-abort">
@@ -27,11 +33,21 @@
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
+ <dd>
40
+ The payload object.
41
+
42
+ <dl class="message-properties">
43
+ <dt class="optional">
44
+ payload.host <span class="property-type">string</span>
45
+ </dt>
46
+ <dd>
47
+ The host of the Ollama instance.<br />
48
+ <em>Alternative to the <code>Server</code> field.</em>
49
+ </dd>
50
+ </dl>
51
+ </dd>
36
52
  </dl>
37
53
  </script>
@@ -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
 
@@ -3,7 +3,9 @@
3
3
  category: 'AI',
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
- name: { value: '' }
6
+ name: { value: 'Ollama Chat' },
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: true },
7
9
  },
8
10
  inputs: 1,
9
11
  outputs: 1,
@@ -17,7 +19,17 @@
17
19
  <script type="text/html" data-template-name="ollama-chat">
18
20
  <div class="form-row">
19
21
  <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
20
- <input type="text" id="node-input-name" placeholder="Name" />
22
+ <input type="text" id="node-input-name" placeholder="Node Name" />
23
+ </div>
24
+
25
+ <div class="form-row">
26
+ <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
27
+ <input type="text" id="node-input-server" />
28
+ </div>
29
+
30
+ <div class="form-row">
31
+ <label for="node-input-model"><i class="fa fa-bookmark"></i> Model</label>
32
+ <input type="text" id="node-input-model" />
21
33
  </div>
22
34
  </script>
23
35
 
@@ -27,299 +39,235 @@
27
39
  <h3>Inputs</h3>
28
40
 
29
41
  <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.messages
46
-
47
- <span class="property-type">array</span>
48
- </dt>
49
- <dd>
50
- The chat history to use for generating the next message.<br />
51
-
52
- <h4>Message</h4>
53
- <dl class="message-properties">
54
- <dt>
55
- role
56
-
57
- <span class="property-type">string</span>
58
- </dt>
59
- <dd>The role of the message sender ('user', 'system', or 'assistant').</dd>
60
-
61
- <dt>
62
- content
63
-
64
- <span class="property-type">string</span>
65
- </dt>
66
- <dd>The content of the message.</dd>
67
-
68
- <dt>
69
- images
70
-
71
- <span class="property-type">array</span>
72
- </dt>
73
- <dd>The images attached to the message, either as Uint8Array or base64 encoded strings.</dd>
74
-
75
- <dt>
76
- tool_calls
77
-
78
- <span class="property-type">array</span>
79
- </dt>
80
- <dd>A list of tools the model wants to use.</dd>
81
- </dl>
82
- </dd>
83
-
84
42
  <dt class="optional">
85
- payload.format
86
-
87
- <span class="property-type">string</span>
43
+ payload <span class="property-type">object</span>
88
44
  </dt>
89
- <dd>The format of the response (only <code>json</code> for now).</dd>
90
45
 
91
- <dt class="optional">
92
- payload.stream
93
-
94
- <span class="property-type">boolean</span>
95
- </dt>
96
- <dd>When true an AsyncGenerator is returned.</dd>
97
-
98
- <dt class="optional">
99
- payload.keep_alive
100
-
101
- <span class="property-type">array</span>
102
- </dt>
103
- <dd>How long to keep the model loaded.</dd>
104
-
105
- <dt class="optional">
106
- payload.tools
107
-
108
- <span class="property-type">array</span>
109
- </dt>
110
46
  <dd>
111
- Tools for the model to use if supported.<br />
112
- Requires <code>stream</code> to be set to <code>false</code>.
113
-
114
- <p>
115
- For more information, see the Ollama API documentation:<br />
116
- <a href="https://github.com/ollama/ollama/blob/main/docs/api.md#chat-request-with-tools" target="_blank">Chat request with tools</a>
117
- </p>
118
- </dd>
47
+ The payload object.
119
48
 
120
- <dt class="optional">
121
- payload.options
122
-
123
- <span class="property-type">object</span>
124
- </dt>
125
- <dd>
126
- Options to configure the runtime.<br />
127
-
128
- <h4>Options</h4>
129
49
  <dl class="message-properties">
130
- <dt>
131
- numa
132
-
133
- <span class="property-type">boolean</span>
134
- </dt>
135
- <dd>Use NUMA for the runtime.</dd>
136
-
137
- <dt>
138
- num_ctx
139
-
140
- <span class="property-type">number</span>
141
- </dt>
142
- <dd>The number of contexts to use.</dd>
143
-
144
- <dt>
145
- num_batch
146
-
147
- <span class="property-type">number</span>
148
- </dt>
149
- <dd>The number of batches to use.</dd>
150
-
151
- <dt>
152
- main_gpu
153
-
154
- <span class="property-type">number</span>
155
- </dt>
156
- <dd>The main GPU to use.</dd>
157
-
158
- <dt>
159
- low_vram
160
-
161
- <span class="property-type">boolean</span>
162
- </dt>
163
- <dd>Use low VRAM.</dd>
164
-
165
- <dt>
166
- f16_kv
167
-
168
- <span class="property-type">boolean</span>
169
- </dt>
170
- <dd>Use f16 key-value.</dd>
171
-
172
- <dt>
173
- logits_all
174
-
175
- <span class="property-type">boolean</span>
176
- </dt>
177
- <dd>Return all logits.</dd>
178
-
179
- <dt>
180
- vocab_only
181
-
182
- <span class="property-type">boolean</span>
183
- </dt>
184
- <dd>Return only the vocabulary.</dd>
185
-
186
- <dt>
187
- use_nmap
188
-
189
- <span class="property-type">boolean</span>
190
- </dt>
191
- <dd>Use NMAP.</dd>
192
-
193
- <dt>
194
- use_mlock
195
-
196
- <span class="property-type">boolean</span>
197
- </dt>
198
- <dd>Use mlock.</dd>
199
-
200
- <dt>
201
- embedding_only
202
-
203
- <span class="property-type">boolean</span>
204
- </dt>
205
- <dd>Return only the embeddings.</dd>
206
-
207
- <dt>
208
- num_thread
209
-
210
- <span class="property-type">number</span>
211
- </dt>
212
- <dd>The number of threads to use.</dd>
213
-
214
- <dt>
215
- num_keep
216
-
217
- <span class="property-type">number</span>
218
- </dt>
219
- <dd>The number of models to keep.</dd>
220
-
221
- <dt>
222
- seed
223
-
224
- <span class="property-type">number</span>
225
- </dt>
226
- <dd>The seed to use.</dd>
227
-
228
- <dt>
229
- num_predict
230
-
231
- <span class="property-type">number</span>
232
- </dt>
233
- <dd>The number of predictions to use.</dd>
234
-
235
- <dt>
236
- top_k
237
-
238
- <span class="property-type">number</span>
239
- </dt>
240
- <dd>The top k to use.</dd>
241
-
242
- <dt>
243
- top_p
244
-
245
- <span class="property-type">number</span>
50
+ <dt class="optional">
51
+ payload.host <span class="property-type">string</span>
246
52
  </dt>
247
- <dd>The top p to use.</dd>
248
-
249
- <dt>
250
- typical_p
53
+ <dd>
54
+ The host of the Ollama instance.<br />
55
+ <em>Alternative to the <code>Server</code> field.</em>
56
+ </dd>
251
57
 
252
- <span class="property-type">number</span>
58
+ <dt class="optional">
59
+ payload.model <span class="property-type">string</span>
253
60
  </dt>
254
- <dd>The typical p to use.</dd>
255
-
61
+ <dd>
62
+ The model to use for generating the next message.<br />
63
+ <em>Alternative to the <code>Model</code> field.</em>
64
+ </dd>
65
+
256
66
  <dt>
257
- repeat_last_n
258
-
259
- <span class="property-type">number</span>
67
+ payload.messages <span class="property-type">array</span>
260
68
  </dt>
261
- <dd>The repeat last n to use.</dd>
262
-
263
- <dt>
264
- temperature
265
-
266
- <span class="property-type">number</span>
267
- </dt>
268
- <dd>The temperature to use.</dd>
269
-
270
- <dt>
271
- repeat_pentalty
272
-
273
- <span class="property-type">number</span>
274
- </dt>
275
- <dd>The repeat pentalty to use.</dd>
276
-
277
- <dt>
278
- presence_penalty
279
-
280
- <span class="property-type">number</span>
281
- </dt>
282
- <dd>The presence penalty to use.</dd>
283
-
284
- <dt>
285
- frequency_penalty
69
+ <dd>
70
+ The chat history to use for generating the next message.<br />
286
71
 
287
- <span class="property-type">number</span>
288
- </dt>
289
- <dd>The frequency penalty to use.</dd>
290
-
291
- <dt>
292
- mirostat
293
-
294
- <span class="property-type">boolean</span>
295
- </dt>
296
- <dd>Use mirostat.</dd>
297
-
298
- <dt>
299
- mirostat_tau
300
-
301
- <span class="property-type">number</span>
302
- </dt>
303
-
304
- <dt>
305
- mirostat_eta
306
-
307
- <span class="property-type">number</span>
308
- </dt>
309
-
310
- <dt>
311
- penalize_newline
312
-
313
- <span class="property-type">boolean</span>
314
- </dt>
315
- <dd>Penalize newline.</dd>
316
-
317
- <dt>
318
- stop
319
-
320
- <span class="property-type">array</span>
321
- </dt>
322
- <dd>The stop to use.</dd>
72
+ <h4>Message</h4>
73
+ <dl class="message-properties">
74
+ <dt>
75
+ role <span class="property-type">string</span>
76
+ </dt>
77
+ <dd>The role of the message sender ('user', 'system', or 'assistant').</dd>
78
+
79
+ <dt>
80
+ content <span class="property-type">string</span>
81
+ </dt>
82
+ <dd>The content of the message.</dd>
83
+
84
+ <dt>
85
+ images <span class="property-type">array</span>
86
+ </dt>
87
+ <dd>The images attached to the message, either as Uint8Array or base64 encoded strings.</dd>
88
+
89
+ <dt>
90
+ tool_calls <span class="property-type">array</span>
91
+ </dt>
92
+ <dd>A list of tools the model wants to use.</dd>
93
+ </dl>
94
+ </dd>
95
+
96
+ <dt class="optional">
97
+ payload.format <span class="property-type">string</span>
98
+ </dt>
99
+ <dd>The format of the response (only <code>json</code> for now).</dd>
100
+
101
+ <dt class="optional">
102
+ payload.stream <span class="property-type">boolean</span>
103
+ </dt>
104
+ <dd>When true an AsyncGenerator is returned.</dd>
105
+
106
+ <dt class="optional">
107
+ payload.keep_alive <span class="property-type">array</span>
108
+ </dt>
109
+ <dd>How long to keep the model loaded.</dd>
110
+
111
+ <dt class="optional">
112
+ payload.tools <span class="property-type">array</span>
113
+ </dt>
114
+ <dd>
115
+ Tools for the model to use if supported.<br />
116
+ Requires <code>stream</code> to be set to <code>false</code>.
117
+
118
+ <p>
119
+ For more information, see the Ollama API documentation:<br />
120
+ <a href="https://github.com/ollama/ollama/blob/main/docs/api.md#chat-request-with-tools" target="_blank">Chat request with tools</a>
121
+ </p>
122
+ </dd>
123
+
124
+ <dt class="optional">
125
+ payload.options <span class="property-type">object</span>
126
+ </dt>
127
+ <dd>
128
+ Options to configure the runtime.<br />
129
+
130
+ <h4>Options</h4>
131
+ <dl class="message-properties">
132
+ <dt>
133
+ numa <span class="property-type">boolean</span>
134
+ </dt>
135
+ <dd>Use NUMA for the runtime.</dd>
136
+
137
+ <dt>
138
+ num_ctx <span class="property-type">number</span>
139
+ </dt>
140
+ <dd>The number of contexts to use.</dd>
141
+
142
+ <dt>
143
+ num_batch <span class="property-type">number</span>
144
+ </dt>
145
+ <dd>The number of batches to use.</dd>
146
+
147
+ <dt>
148
+ main_gpu <span class="property-type">number</span>
149
+ </dt>
150
+ <dd>The main GPU to use.</dd>
151
+
152
+ <dt>
153
+ low_vram <span class="property-type">boolean</span>
154
+ </dt>
155
+ <dd>Use low VRAM.</dd>
156
+
157
+ <dt>
158
+ f16_kv <span class="property-type">boolean</span>
159
+ </dt>
160
+ <dd>Use f16 key-value.</dd>
161
+
162
+ <dt>
163
+ logits_all <span class="property-type">boolean</span>
164
+ </dt>
165
+ <dd>Return all logits.</dd>
166
+
167
+ <dt>
168
+ vocab_only <span class="property-type">boolean</span>
169
+ </dt>
170
+ <dd>Return only the vocabulary.</dd>
171
+
172
+ <dt>
173
+ use_nmap <span class="property-type">boolean</span>
174
+ </dt>
175
+ <dd>Use NMAP.</dd>
176
+
177
+ <dt>
178
+ use_mlock <span class="property-type">boolean</span>
179
+ </dt>
180
+ <dd>Use mlock.</dd>
181
+
182
+ <dt>
183
+ embedding_only <span class="property-type">boolean</span>
184
+ </dt>
185
+ <dd>Return only the embeddings.</dd>
186
+
187
+ <dt>
188
+ num_thread <span class="property-type">number</span>
189
+ </dt>
190
+ <dd>The number of threads to use.</dd>
191
+
192
+ <dt>
193
+ num_keep <span class="property-type">number</span>
194
+ </dt>
195
+ <dd>The number of models to keep.</dd>
196
+
197
+ <dt>
198
+ seed <span class="property-type">number</span>
199
+ </dt>
200
+ <dd>The seed to use.</dd>
201
+
202
+ <dt>
203
+ num_predict <span class="property-type">number</span>
204
+ </dt>
205
+ <dd>The number of predictions to use.</dd>
206
+
207
+ <dt>
208
+ top_k <span class="property-type">number</span>
209
+ </dt>
210
+ <dd>The top k to use.</dd>
211
+
212
+ <dt>
213
+ top_p <span class="property-type">number</span>
214
+ </dt>
215
+ <dd>The top p to use.</dd>
216
+
217
+ <dt>
218
+ typical_p <span class="property-type">number</span>
219
+ </dt>
220
+ <dd>The typical p to use.</dd>
221
+
222
+ <dt>
223
+ repeat_last_n <span class="property-type">number</span>
224
+ </dt>
225
+ <dd>The repeat last n to use.</dd>
226
+
227
+ <dt>
228
+ temperature <span class="property-type">number</span>
229
+ </dt>
230
+ <dd>The temperature to use.</dd>
231
+
232
+ <dt>
233
+ repeat_pentalty <span class="property-type">number</span>
234
+ </dt>
235
+ <dd>The repeat pentalty to use.</dd>
236
+
237
+ <dt>
238
+ presence_penalty <span class="property-type">number</span>
239
+ </dt>
240
+ <dd>The presence penalty to use.</dd>
241
+
242
+ <dt>
243
+ frequency_penalty <span class="property-type">number</span>
244
+ </dt>
245
+ <dd>The frequency penalty to use.</dd>
246
+
247
+ <dt>
248
+ mirostat <span class="property-type">boolean</span>
249
+ </dt>
250
+ <dd>Use mirostat.</dd>
251
+
252
+ <dt>
253
+ mirostat_tau <span class="property-type">number</span>
254
+ </dt>
255
+
256
+ <dt>
257
+ mirostat_eta <span class="property-type">number</span>
258
+ </dt>
259
+
260
+ <dt>
261
+ penalize_newline <span class="property-type">boolean</span>
262
+ </dt>
263
+ <dd>Penalize newline.</dd>
264
+
265
+ <dt>
266
+ stop <span class="property-type">array</span>
267
+ </dt>
268
+ <dd>The stop to use.</dd>
269
+ </dl>
270
+ </dd>
323
271
  </dl>
324
272
  </dd>
325
273
  </dl>
@@ -7,8 +7,8 @@ module.exports = function( RED ) {
7
7
 
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
- host,
11
- model,
10
+ host: payloadHost,
11
+ model: payloadModel,
12
12
  messages,
13
13
  format,
14
14
  stream,
@@ -17,17 +17,23 @@ module.exports = function( RED ) {
17
17
  options
18
18
  } = msg.payload
19
19
 
20
+ const server = RED.nodes.getNode( config.server )
21
+ const host = ( server ) ? server.host + ':' + server.port : payloadHost
22
+
20
23
  const ollama = new Ollama( { host } )
21
24
 
25
+ const modelConfig = RED.nodes.getNode( config.model )
26
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
27
+
22
28
  const response = await ollama.chat( {
23
- model,
24
- messages,
25
- format,
26
- stream,
27
- keep_alive,
28
- tools,
29
- options
30
- } )
29
+ model,
30
+ messages,
31
+ format,
32
+ stream,
33
+ keep_alive,
34
+ tools,
35
+ options
36
+ } )
31
37
  .catch( error => {
32
38
  node.error( error )
33
39
  } )
@@ -0,0 +1,18 @@
1
+ <script type="text/javascript">
2
+ RED.nodes.registerType( 'ollama-config-model', {
3
+ category: 'config',
4
+ defaults: {
5
+ name: { value: '', required: true }
6
+ },
7
+ label: function() {
8
+ return this.name;
9
+ }
10
+ } )
11
+ </script>
12
+
13
+ <script type="text/html" data-template-name="ollama-config-model">
14
+ <div class="form-row">
15
+ <label for="node-config-input-name"><i class="fa fa-server"></i> Name</label>
16
+ <input type="text" id="node-config-input-name" placeholder="llama3.3" />
17
+ </div>
18
+ </script>
@@ -0,0 +1,9 @@
1
+ module.exports = function( RED ) {
2
+ function OllamaConfigModelNode( config ) {
3
+ RED.nodes.createNode( this, config )
4
+
5
+ this.name = config.name
6
+ }
7
+
8
+ RED.nodes.registerType( 'ollama-config-model', OllamaConfigModelNode )
9
+ }