node-red-contrib-ollama 0.2.2 → 0.2.4

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.
@@ -4,7 +4,9 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Chat' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: true },
9
+ tools: { value: '', type: 'ollama-config-tools', required: false },
8
10
  },
9
11
  inputs: 1,
10
12
  outputs: 1,
@@ -25,6 +27,16 @@
25
27
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
28
  <input type="text" id="node-input-server" />
27
29
  </div>
30
+
31
+ <div class="form-row">
32
+ <label for="node-input-model"><i class="fa fa-bookmark"></i> Model</label>
33
+ <input type="text" id="node-input-model" />
34
+ </div>
35
+
36
+ <div class="form-row">
37
+ <label for="node-input-tools"><i class="fa fa-cog"></i> Tools</label>
38
+ <input type="text" id="node-input-tools" />
39
+ </div>
28
40
  </script>
29
41
 
30
42
  <script type="text/html" data-help-name="ollama-chat">
@@ -49,10 +61,13 @@
49
61
  <em>Alternative to the <code>Server</code> field.</em>
50
62
  </dd>
51
63
 
52
- <dt>
64
+ <dt class="optional">
53
65
  payload.model <span class="property-type">string</span>
54
66
  </dt>
55
- <dd>The model to use for generating the next message.</dd>
67
+ <dd>
68
+ The model to use for generating the next message.<br />
69
+ <em>Alternative to the <code>Model</code> field.</em>
70
+ </dd>
56
71
 
57
72
  <dt>
58
73
  payload.messages <span class="property-type">array</span>
@@ -105,6 +120,7 @@
105
120
  <dd>
106
121
  Tools for the model to use if supported.<br />
107
122
  Requires <code>stream</code> to be set to <code>false</code>.
123
+ <em>Alternative to the <code>Model</code> field.</em>
108
124
 
109
125
  <p>
110
126
  For more information, see the Ollama API documentation:<br />
@@ -8,21 +8,26 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model,
11
+ model: payloadModel,
12
12
  messages,
13
13
  format,
14
14
  stream,
15
15
  keep_alive,
16
- tools,
16
+ tools: payloadTools,
17
17
  options
18
18
  } = msg.payload
19
19
 
20
20
  const server = RED.nodes.getNode( config.server )
21
-
22
21
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
23
22
 
24
23
  const ollama = new Ollama( { host } )
25
24
 
25
+ const modelConfig = RED.nodes.getNode( config.model )
26
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
27
+
28
+ const toolsConfig = RED.nodes.getNode( config.tools )
29
+ const tools = ( toolsConfig ) ? toolsConfig.json : payloadTools
30
+
26
31
  const response = await ollama.chat( {
27
32
  model,
28
33
  messages,
@@ -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
+ }
@@ -0,0 +1,30 @@
1
+ <script type="text/javascript">
2
+ RED.nodes.registerType( 'ollama-config-tools', {
3
+ category: 'config',
4
+ defaults: {
5
+ name: { value: 'Ollama Tools Config' },
6
+ json: { value: '' }
7
+ },
8
+ label: function() {
9
+ return this.name;
10
+ },
11
+ oneditprepare: function() {
12
+ $( '#node-config-input-json' ).typedInput( {
13
+ type: 'json',
14
+ types: [ 'json' ]
15
+ } )
16
+ }
17
+ } )
18
+ </script>
19
+
20
+ <script type="text/html" data-template-name="ollama-config-tools">
21
+ <div class="form-row">
22
+ <label for="node-config-input-name"><i class="fa fa-server"></i> Name</label>
23
+ <input type="text" id="node-config-input-name" placeholder="Ollama Tools Config" />
24
+ </div>
25
+
26
+ <div class="form-row">
27
+ <label for="node-config-input-json"><i class="fa fa-cog"></i> JSON</label>
28
+ <input type="text" id="node-config-input-json" placeholder="" />
29
+ </div>
30
+ </script>
@@ -0,0 +1,10 @@
1
+ module.exports = function( RED ) {
2
+ function OllamaConfigToolsNode( config ) {
3
+ RED.nodes.createNode( this, config )
4
+
5
+ this.name = config.name
6
+ this.json = config.json
7
+ }
8
+
9
+ RED.nodes.registerType( 'ollama-config-tools', OllamaConfigToolsNode )
10
+ }
@@ -4,7 +4,8 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Create' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: false },
8
9
  },
9
10
  inputs: 1,
10
11
  outputs: 1,
@@ -25,6 +26,11 @@
25
26
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
27
  <input type="text" id="node-input-server" />
27
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" />
33
+ </div>
28
34
  </script>
29
35
 
30
36
  <script type="text/html" data-help-name="ollama-create">
@@ -49,25 +55,28 @@
49
55
  <em>Alternative to the <code>Server</code> field.</em>
50
56
  </dd>
51
57
 
52
- <dt>
58
+ <dt class="optional">
53
59
  payload.model <span class="property-type">string</span>
54
60
  </dt>
55
- <p>The name of the model to create.</p>
61
+ <dd>
62
+ The name of the model to create.<br />
63
+ <em>Alternative to the <code>Model</code> field.</em>
64
+ </dd>
56
65
 
57
66
  <dt class="optional">
58
67
  payload.path <span class="property-type">string</span>
59
68
  </dt>
60
- <p>The path to the Modelfile to use for creating the model.</p>
69
+ <dd>The path to the Modelfile to use for creating the model.</dd>
61
70
 
62
71
  <dt class="optional">
63
72
  payload.modelfile <span class="property-type">string</span>
64
73
  </dt>
65
- <p>The content of the Modelfile to create.</p>
74
+ <dd>The content of the Modelfile to create.</dd>
66
75
 
67
76
  <dt class="optional">
68
77
  payload.stream <span class="property-type">boolean</span>
69
78
  </dt>
70
- <p>When true an AsyncGenerator is returned.</p>
79
+ <dd>When true an AsyncGenerator is returned.</dd>
71
80
  </dl>
72
81
  </dd>
73
82
  </dl>
@@ -8,18 +8,20 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model,
11
+ model: payloadModel,
12
12
  modelfile,
13
13
  stream,
14
14
  path
15
15
  } = msg.payload
16
16
 
17
17
  const server = RED.nodes.getNode( config.server )
18
-
19
18
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
20
19
 
21
20
  const ollama = new Ollama( { host } )
22
21
 
22
+ const modelConfig = RED.nodes.getNode( config.model )
23
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
24
+
23
25
  const response = await ollama.create( {
24
26
  model,
25
27
  modelfile,
@@ -4,7 +4,8 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Delete' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: false },
8
9
  },
9
10
  inputs: 1,
10
11
  outputs: 1,
@@ -25,6 +26,11 @@
25
26
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
27
  <input type="text" id="node-input-server" />
27
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" />
33
+ </div>
28
34
  </script>
29
35
 
30
36
  <script type="text/html" data-help-name="ollama-delete">
@@ -49,10 +55,13 @@
49
55
  <em>Alternative to the <code>Server</code> field.</em>
50
56
  </dd>
51
57
 
52
- <dt>
58
+ <dt class="optional">
53
59
  payload.model <span class="property-type">string</span>
54
60
  </dt>
55
- <dd>The name of the model to delete.</dd>
61
+ <dd>
62
+ The name of the model to delete.<br />
63
+ <em>Alternative to the <code>Model</code> field.</em>
64
+ </dd>
56
65
  </dl>
57
66
  </dd>
58
67
  </dl>
@@ -8,15 +8,17 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model
11
+ model: payloadModel
12
12
  } = msg.payload
13
13
 
14
14
  const server = RED.nodes.getNode( config.server )
15
-
16
15
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
17
16
 
18
17
  const ollama = new Ollama( { host } )
19
18
 
19
+ const modelConfig = RED.nodes.getNode( config.model )
20
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
21
+
20
22
  const response = await ollama.delete( { model } )
21
23
  .catch( error => {
22
24
  node.error( error )
@@ -4,7 +4,8 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Embed' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: false },
8
9
  },
9
10
  inputs: 1,
10
11
  outputs: 1,
@@ -25,6 +26,11 @@
25
26
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
27
  <input type="text" id="node-input-server" />
27
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" />
33
+ </div>
28
34
  </script>
29
35
 
30
36
  <script type="text/html" data-help-name="ollama-embed">
@@ -49,10 +55,13 @@
49
55
  <em>Alternative to the <code>Server</code> field.</em>
50
56
  </dd>
51
57
 
52
- <dt>
58
+ <dt class="optional">
53
59
  payload.model <span class="property-type">string</span>
54
60
  </dt>
55
- <dd>The name of the model used to generate the embeddings.</dd>
61
+ <dd>
62
+ The name of the model used to generate the embeddings.<br />
63
+ <em>Alternative to the <code>Model</code> field.</em>
64
+ </dd>
56
65
 
57
66
  <dt>
58
67
  payload.input <span class="property-type">string | array[string]</span>
@@ -8,7 +8,7 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model,
11
+ model: payloadModel,
12
12
  input,
13
13
  truncate,
14
14
  keep_alive,
@@ -16,11 +16,13 @@ module.exports = function( RED ) {
16
16
  } = msg.payload
17
17
 
18
18
  const server = RED.nodes.getNode( config.server )
19
-
20
19
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
21
20
 
22
21
  const ollama = new Ollama( { host } )
23
22
 
23
+ const modelConfig = RED.nodes.getNode( config.model )
24
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
25
+
24
26
  const response = await ollama.embed( {
25
27
  model,
26
28
  input,
@@ -4,7 +4,8 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Generate' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: false },
8
9
  },
9
10
  inputs: 1,
10
11
  outputs: 1,
@@ -25,6 +26,11 @@
25
26
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
27
  <input type="text" id="node-input-server" />
27
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" />
33
+ </div>
28
34
  </script>
29
35
 
30
36
  <script type="text/html" data-help-name="ollama-generate">
@@ -49,10 +55,13 @@
49
55
  <em>Alternative to the <code>Server</code> field.</em>
50
56
  </dd>
51
57
 
52
- <dt>
58
+ <dt class="optional">
53
59
  payload.model <span class="property-type">string</span>
54
60
  </dt>
55
- <dd>The model to use for generating the next message.</dd>
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>
56
65
 
57
66
  <dt>
58
67
  payload.prompt <span class="property-type">string</span>
@@ -8,7 +8,7 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model,
11
+ model: payloadModel,
12
12
  prompt,
13
13
  suffix,
14
14
  system,
@@ -22,11 +22,13 @@ module.exports = function( RED ) {
22
22
  } = msg.payload
23
23
 
24
24
  const server = RED.nodes.getNode( config.server )
25
-
26
25
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
27
26
 
28
27
  const ollama = new Ollama( { host } )
29
28
 
29
+ const modelConfig = RED.nodes.getNode( config.model )
30
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
31
+
30
32
  const response = await ollama.generate( {
31
33
  model,
32
34
  prompt,
@@ -4,7 +4,8 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Pull' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: false },
8
9
  },
9
10
  inputs: 1,
10
11
  outputs: 1,
@@ -25,6 +26,11 @@
25
26
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
27
  <input type="text" id="node-input-server" />
27
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" />
33
+ </div>
28
34
  </script>
29
35
 
30
36
  <script type="text/html" data-help-name="ollama-pull">
@@ -49,10 +55,13 @@
49
55
  <em>Alternative to the <code>Server</code> field.</em>
50
56
  </dd>
51
57
 
52
- <dt>
58
+ <dt class="optional">
53
59
  payload.model <span class="property-type">string</span>
54
60
  </dt>
55
- <dd>The name of the model to download.</dd>
61
+ <dd>
62
+ The name of the model to download.<br />
63
+ <em>Alternative to the <code>Model</code> field.</em>
64
+ </dd>
56
65
 
57
66
  <dt>
58
67
  payload.insecure <span class="property-type">boolean</span>
@@ -8,18 +8,24 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model,
11
+ model: payloadModel,
12
12
  insecure,
13
13
  stream
14
14
  } = msg.payload
15
15
 
16
16
  const server = RED.nodes.getNode( config.server )
17
-
18
17
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
19
18
 
20
19
  const ollama = new Ollama( { host } )
21
20
 
22
- const response = await ollama.pull( { model, insecure, stream } )
21
+ const modelConfig = RED.nodes.getNode( config.model )
22
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
23
+
24
+ const response = await ollama.pull( {
25
+ model,
26
+ insecure,
27
+ stream
28
+ } )
23
29
  .catch( error => {
24
30
  node.error( error )
25
31
  } )
@@ -4,7 +4,8 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Push' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: false },
8
9
  },
9
10
  inputs: 1,
10
11
  outputs: 1,
@@ -25,6 +26,11 @@
25
26
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
27
  <input type="text" id="node-input-server" />
27
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" />
33
+ </div>
28
34
  </script>
29
35
 
30
36
  <script type="text/html" data-help-name="ollama-push">
@@ -49,10 +55,13 @@
49
55
  <em>Alternative to the <code>Server</code> field.</em>
50
56
  </dd>
51
57
 
52
- <dt>
58
+ <dt class="optional">
53
59
  payload.model <span class="property-type">string</span>
54
60
  </dt>
55
- <dd>The name of the model to upload.</dd>
61
+ <dd>
62
+ The name of the model to upload.<br />
63
+ <em>Alternative to the <code>Model</code> field.</em>
64
+ </dd>
56
65
 
57
66
  <dt>
58
67
  payload.insecure <span class="property-type">boolean</span>
@@ -8,18 +8,24 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model,
11
+ model: payloadModel,
12
12
  insecure,
13
13
  stream
14
14
  } = msg.payload
15
15
 
16
16
  const server = RED.nodes.getNode( config.server )
17
-
18
17
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
19
18
 
20
19
  const ollama = new Ollama( { host } )
21
20
 
22
- const response = await ollama.push( { model, insecure, stream } )
21
+ const modelConfig = RED.nodes.getNode( config.model )
22
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
23
+
24
+ const response = await ollama.push( {
25
+ model,
26
+ insecure,
27
+ stream
28
+ } )
23
29
  .catch( error => {
24
30
  node.error( error )
25
31
  } )
@@ -4,7 +4,8 @@
4
4
  color: 'rgb(186 230 253)',
5
5
  defaults: {
6
6
  name: { value: 'Ollama Show' },
7
- server: { value: '', type: 'ollama-config-server', required: false }
7
+ server: { value: '', type: 'ollama-config-server', required: false },
8
+ model: { value: '', type: 'ollama-config-model', required: false },
8
9
  },
9
10
  inputs: 1,
10
11
  outputs: 1,
@@ -25,6 +26,11 @@
25
26
  <label for="node-input-server"><i class="fa fa-server"></i> Server</label>
26
27
  <input type="text" id="node-input-server" />
27
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" />
33
+ </div>
28
34
  </script>
29
35
 
30
36
  <script type="text/html" data-help-name="ollama-show">
@@ -49,10 +55,13 @@
49
55
  <em>Alternative to the <code>Server</code> field.</em>
50
56
  </dd>
51
57
 
52
- <dt>
58
+ <dt class="optional">
53
59
  payload.model <span class="property-type">string</span>
54
60
  </dt>
55
- <dd>The model to show information for.</dd>
61
+ <dd>
62
+ The model to show information for.<br />
63
+ <em>Alternative to the <code>Model</code> field.</em>
64
+ </dd>
56
65
 
57
66
  <dt class="optional">
58
67
  payload.system <span class="property-type">string</span>
@@ -8,18 +8,20 @@ module.exports = function( RED ) {
8
8
  node.on( 'input', async function( msg ) {
9
9
  const {
10
10
  host: payloadHost,
11
- model,
11
+ model: payloadModel,
12
12
  system,
13
13
  template,
14
14
  options
15
15
  } = msg.payload
16
16
 
17
17
  const server = RED.nodes.getNode( config.server )
18
-
19
18
  const host = ( server ) ? server.host + ':' + server.port : payloadHost
20
19
 
21
20
  const ollama = new Ollama( { host } )
22
21
 
22
+ const modelConfig = RED.nodes.getNode( config.model )
23
+ const model = ( modelConfig ) ? modelConfig.name : payloadModel
24
+
23
25
  const response = await ollama.show( {
24
26
  model,
25
27
  system,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-ollama",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Add AI functionality to your flows! This module includes a set of nodes that enable easy communication with Ollama, enriching your projects with intelligent solutions.",
5
5
  "keywords": [
6
6
  "ai",
@@ -29,7 +29,9 @@
29
29
  "ollama-show": "nodes/ollama-show.js",
30
30
  "ollama-ps": "nodes/ollama-ps.js",
31
31
  "ollama-abort": "nodes/ollama-abort.js",
32
- "ollama-config-server": "nodes/ollama-config-server.js"
32
+ "ollama-config-server": "nodes/ollama-config-server.js",
33
+ "ollama-config-model": "nodes/ollama-config-model.js",
34
+ "ollama-config-tools": "nodes/ollama-config-tools.js"
33
35
  }
34
36
  },
35
37
  "engines": {