This module provides a node that connects and operates with ChromaDB in Node-RED.
These nodes require node.js version 18.16.1 and Node-RED version 3.1.0.
This node is part of the Facial Recognition with AI package.
If you would like to see the entire package, please go to the link.
@good-i-deer/node-red-contrib-vision-ai
ChromaDB is the open-source embedding database. ChromaDB makes it easy to store and query embedded values. This node makes it possible to run ChromaDB operations(create/delete collection, insert/query/delete embedding) in Node-RED.
The Node-Red-Contrib-ChromaDB requires Node-RED to be installed and requires a running Chroma-DB server.
If necessary, you can install and run the chromaDB server on local. Please refer to Getting Started.
cd ~/.node-red
npm install @good-i-deer/node-red-contrib-chromadb
Restart your Node-RED instance.
Single Embedding
- The input could be an embedding value in the form of an array of real numbers.
- Used for input of insert or query operation.
Embedding Array
- The input could be embedding values in the form of an array of real number arrays.
- Used for input of insert or query operation.
ID Array
- The input could be one or more ids in the form of an array of string.
- Used for input of delete operation.
Name
- The name of the node displayed on the screen.
Host
- The addreess where ChromaDB server is running.
Port
- The port number where ChromDB server is running.
Operation
-
The operation that want to run on ChromaDB.
-
Operation Types
-
list: list all collections in ChromaDB server.
-
create: create collection. Does not create if the collection with same name already exists.
-
insert: insert embedding value(s) into the collection.
-
query: query the N nearest distance embeddings.
-
delete: delete embedding with id.
-
drop: drop collection.
-
DB Name
- The name of DB(collection) that you want to create, delete, or apply the operation.
Dist Method
-
The distance method for calculating distances between embeddings.
-
You can set the distance method when you create DB.
Result Count
-
The number of result you want to get when you run query operation.
-
Query operation return N(=result count) nearest distance for each embedding.
Collection list
- After list operation, collection list in the form of a string array are passed within msg.payload.
ID Array
- After inserting embeddings, IDs in the form of a string array are passed within msg.result.
Query Response
- After querying embeddings, the query response, which contains IDs, distances, metadatas, and documents in the form of an object, is passed within msg.payload.
Result
- After create, drop operation, the result explaining success of operation in the form of a string is passed within msg.result.
The following are example flows using Good ChromaDB.
[
{
"id": "1e6ef671efdf6e7b",
"type": "tab",
"label": "ChromaDB",
"disabled": false,
"info": "",
"env": []
},
{
"id": "4792f9f4b8190c2f",
"type": "inject",
"z": "1e6ef671efdf6e7b",
"name": "",
"props": [],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 290,
"y": 320,
"wires": [
[
"a8efe2228a20081d"
]
]
},
{
"id": "c6332d85335a6f9f",
"type": "debug",
"z": "1e6ef671efdf6e7b",
"name": "Result",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "result",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 750,
"y": 320,
"wires": []
},
{
"id": "1d56935af7702c2d",
"type": "comment",
"z": "1e6ef671efdf6e7b",
"name": "Good I Deer ChromaDB",
"info": "",
"x": 320,
"y": 200,
"wires": []
},
{
"id": "d667ed331e78790d",
"type": "inject",
"z": "1e6ef671efdf6e7b",
"name": "Embeddings",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[[1.2, 2.4, 4.5], [2.2, 4.4, 4.5]]",
"payloadType": "jsonata",
"x": 310,
"y": 380,
"wires": [
[
"c203de7681166255"
]
]
},
{
"id": "e778da936ae795f4",
"type": "debug",
"z": "1e6ef671efdf6e7b",
"name": "Result",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "result",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 750,
"y": 380,
"wires": []
},
{
"id": "6ae163d47c1f45cf",
"type": "inject",
"z": "1e6ef671efdf6e7b",
"name": "Embeddings",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[[1.2, 2.4, 4.5], [2.2, 4.4, 4.5]]",
"payloadType": "jsonata",
"x": 310,
"y": 440,
"wires": [
[
"5f7cd9e19723b46e"
]
]
},
{
"id": "32ea1864d84fdb4e",
"type": "debug",
"z": "1e6ef671efdf6e7b",
"name": "Payload",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 760,
"y": 440,
"wires": []
},
{
"id": "8c25f32070d63b87",
"type": "inject",
"z": "1e6ef671efdf6e7b",
"name": "IDs",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[\"id-1\", \"id-2\"]",
"payloadType": "jsonata",
"x": 290,
"y": 500,
"wires": [
[
"cf75be103178217a"
]
]
},
{
"id": "67946cfb0b10bac5",
"type": "debug",
"z": "1e6ef671efdf6e7b",
"name": "Result",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 750,
"y": 500,
"wires": []
},
{
"id": "4acb518fd1eb8271",
"type": "inject",
"z": "1e6ef671efdf6e7b",
"name": "",
"props": [],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 290,
"y": 260,
"wires": [
[
"603eb6e696d796f2"
]
]
},
{
"id": "63358d81ceaa24de",
"type": "debug",
"z": "1e6ef671efdf6e7b",
"name": "Payload",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 760,
"y": 260,
"wires": []
},
{
"id": "624f10863faede9f",
"type": "inject",
"z": "1e6ef671efdf6e7b",
"name": "",
"props": [],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 290,
"y": 560,
"wires": [
[
"30f9b81713d706aa"
]
]
},
{
"id": "796b026101abc5f9",
"type": "debug",
"z": "1e6ef671efdf6e7b",
"name": "Result",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "result",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 750,
"y": 560,
"wires": []
},
{
"id": "a8efe2228a20081d",
"type": "good-chroma-db",
"z": "1e6ef671efdf6e7b",
"name": "Create Collection",
"dbIp": "http://localhost",
"dbPort": "8000",
"dbName": "MyCollection",
"distance": "cosine",
"operation": "create",
"nResults": "1",
"x": 530,
"y": 320,
"wires": [
[
"c6332d85335a6f9f"
]
]
},
{
"id": "c203de7681166255",
"type": "good-chroma-db",
"z": "1e6ef671efdf6e7b",
"name": "Insert Embeddings",
"dbIp": "http://localhost",
"dbPort": "8000",
"dbName": "MyCollection",
"distance": "cosine",
"operation": "insert",
"nResults": "1",
"x": 530,
"y": 380,
"wires": [
[
"e778da936ae795f4"
]
]
},
{
"id": "5f7cd9e19723b46e",
"type": "good-chroma-db",
"z": "1e6ef671efdf6e7b",
"name": "Query Embeddings",
"dbIp": "http://localhost",
"dbPort": "8000",
"dbName": "MyCollection",
"distance": "cosine",
"operation": "query",
"nResults": "10",
"x": 530,
"y": 440,
"wires": [
[
"32ea1864d84fdb4e"
]
]
},
{
"id": "cf75be103178217a",
"type": "good-chroma-db",
"z": "1e6ef671efdf6e7b",
"name": "Delete Embeddings",
"dbIp": "http://localhost",
"dbPort": "8000",
"dbName": "MyCollection",
"distance": "cosine",
"operation": "delete",
"nResults": "1",
"x": 530,
"y": 500,
"wires": [
[
"67946cfb0b10bac5"
]
]
},
{
"id": "30f9b81713d706aa",
"type": "good-chroma-db",
"z": "1e6ef671efdf6e7b",
"name": "Drop Collection",
"dbIp": "http://localhost",
"dbPort": "8000",
"dbName": "MyCollection",
"distance": "cosine",
"operation": "drop",
"nResults": "1",
"x": 520,
"y": 560,
"wires": [
[
"796b026101abc5f9"
]
]
},
{
"id": "603eb6e696d796f2",
"type": "good-chroma-db",
"z": "1e6ef671efdf6e7b",
"name": "List Collections",
"dbIp": "http://localhost",
"dbPort": "8000",
"dbName": "MyCollection",
"distance": "cosine",
"operation": "list",
"nResults": "1",
"x": 520,
"y": 260,
"wires": [
[
"63358d81ceaa24de"
]
]
}
]
Use GitHub Issues to ask questions or to discuss new features.
GOOD-I-DEER in SSAFY(Samsung Software Academy for Youth) 9th
Copyright Samsung Automation Studio Team under the Apache 2.0 license