<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>UBOS Community: Dmytro</title>
    <description>The latest articles on UBOS Community by Dmytro (@dmytro_mytsak).</description>
    <link>https://community.ubos.tech/dmytro_mytsak</link>
    <image>
      <url>https://community.ubos.tech/uploads/user/profile_image/4/ec6667f9-a34c-4610-a3ec-12b79297e10c.png</url>
      <title>UBOS Community: Dmytro</title>
      <link>https://community.ubos.tech/dmytro_mytsak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ubos.tech/feed/dmytro_mytsak"/>
    <language>en</language>
    <item>
      <title>How to work with Chroma DB</title>
      <dc:creator>Dmytro</dc:creator>
      <pubDate>Fri, 20 Oct 2023 07:16:26 +0000</pubDate>
      <link>https://community.ubos.tech/dmytro_mytsak/how-to-work-with-chroma-db-4oe0</link>
      <guid>https://community.ubos.tech/dmytro_mytsak/how-to-work-with-chroma-db-4oe0</guid>
      <description>&lt;p&gt;&lt;a href="https://www.trychroma.com/" rel="noopener noreferrer"&gt;Chroma&lt;/a&gt;, a powerful and versatile database management system, has become a cornerstone in the world of data storage and retrieval. In this article, we will demonstrate how to connect &lt;em&gt;Chroma&lt;/em&gt; and how to use it in UBOS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect (initial) to the Chroma Client
&lt;/h2&gt;

&lt;p&gt;In the "&lt;strong&gt;function&lt;/strong&gt;" node, you need to install two npm libraries: &lt;a href="https://www.npmjs.com/package/chromadb" rel="noopener noreferrer"&gt;chromadb&lt;/a&gt; and &lt;a href="https://www.npmjs.com/package/openai" rel="noopener noreferrer"&gt;openai&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ubos.tech/uploads/articles/jp6m1lbwdwer6oul9ib2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ubos.tech/uploads/articles/jp6m1lbwdwer6oul9ib2.png" alt="Image description" width="703" height="914"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To initialize the Chrome client, you need to input the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { ChromaClient } = chromadb;
const { OpenAIEmbeddingFunction } = chromadb; //Chroma provides a convenient wrapper around OpenAI's embedding API. This embedding function runs remotely on OpenAI's servers, and requires an API key. You can get an API key by signing up for an account at OpenAI.
const embedder = new OpenAIEmbeddingFunction({ openai_api_key: "your API Key" })
const client = new ChromaClient({ path: "path to your chroma Cient " }); //for example your client stored somewhere on Amazon, your path will be like: 'https://www.amazon.com/:8000'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After connecting  the client, you will have access to the following methods:&lt;/p&gt;

&lt;h3&gt;
  
  
  Create Collection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { ChromaClient } = chromadb;
const { OpenAIEmbeddingFunction } = chromadb;
const embedder = new OpenAIEmbeddingFunction({ openai_api_key: "your API Key" })
const client = new ChromaClient({ path: "path to your chroma Cient " }); 
const collection = await client.createCollection({ name: 'Your collection name', embeddingFunction: embedder })
return msg;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After creating a collection, you need to call the &lt;em&gt;getCollection&lt;/em&gt; method each time to work with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get Collection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { ChromaClient } = chromadb;
const { OpenAIEmbeddingFunction } = chromadb;
const embedder = new OpenAIEmbeddingFunction({ openai_api_key: "your API Key" })
const client = new ChromaClient({ path: "path to your chroma Cient " }); 
const collection = await client.getCollection({ name: 'Your collection name' })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before writing data, you need to send it for embedding creation.&lt;br&gt;
Data which you get after embedding write to the variable &lt;code&gt;msg.emb&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Insert data to collection (collection.add)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { ChromaClient } = chromadb;
const { OpenAIEmbeddingFunction } = chromadb;
const embedder = new OpenAIEmbeddingFunction({ openai_api_key: "your API Key" })
const client = new ChromaClient({ path: "path to your chroma Cient " }); 
const collection = await client.getCollection({ name: 'Your collection name' })
const create =await collection.add({
    ids: [`your vectors id`], 
    embeddings:msg.emb,  
    metadatas: ['your custom metadata'],
    documents:'your document name'
})

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before getting data from collection, you need to send user request for embedding creation.&lt;br&gt;
Data which you get after embedding write to the variable &lt;code&gt;msg.emb&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Get data from collection (collection.query)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { ChromaClient } = chromadb;
const { OpenAIEmbeddingFunction } = chromadb;
const embedder = new OpenAIEmbeddingFunction({ openai_api_key: "your API Key" })
const client = new ChromaClient({ path: "path to your chroma Cient " }); 
const collection = await client.getCollection({ name: 'Your collection name' })
const result = await collection.query({    
    queryEmbeddings:msg.emb,
    query_text: 'user request',      
    nResults: 2    // count of items which get on result
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage Example:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://community.ubos.tech/uploads/articles/z64mgj96ettov17ryzgm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ubos.tech/uploads/articles/z64mgj96ettov17ryzgm.png" alt="Image description" width="1679" height="535"&gt;&lt;/a&gt;&lt;br&gt;
 In this flow, we passed the user's question "Who was your mother?" to create a vector (embedding) and after this embedding, a query was made in the &lt;code&gt;shevchenko&lt;/code&gt; collection in ChromaDB, and the resulting result was output to the &lt;code&gt;msg.result&lt;/code&gt; variable&lt;br&gt;
Example for creating embedding.&lt;br&gt;
 &lt;a href="https://community.ubos.tech/uploads/articles/jt5f6i49x3e4yqychowv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ubos.tech/uploads/articles/jt5f6i49x3e4yqychowv.png" alt="Image description" width="627" height="210"&gt;&lt;/a&gt;&lt;br&gt;
Performing a query in the &lt;code&gt;shevchenko&lt;/code&gt; collection and processing the result. &lt;br&gt;
&lt;a href="https://community.ubos.tech/uploads/articles/9jvcv3nal2vwzh9o5bxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ubos.tech/uploads/articles/9jvcv3nal2vwzh9o5bxr.png" alt="Image description" width="946" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>openai</category>
      <category>chromadb</category>
    </item>
    <item>
      <title>Створення телеграм бота із інтеграцією з OpenAi</title>
      <dc:creator>Dmytro</dc:creator>
      <pubDate>Thu, 01 Dec 2022 17:23:47 +0000</pubDate>
      <link>https://community.ubos.tech/dmytro_mytsak/stvoriennia-tielieghram-bota-iz-sinkhronizatsiieiu-z-openai-hkp</link>
      <guid>https://community.ubos.tech/dmytro_mytsak/stvoriennia-tielieghram-bota-iz-sinkhronizatsiieiu-z-openai-hkp</guid>
      <description>&lt;p&gt;&lt;strong&gt;В даній статті описується інтеграція телеграм бота  з сервісом &lt;a href="https://openai.com" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Для реалізації даної інтеграції потрібно виконати три кроки:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Створити та підключитися до телеграм бота за допомогою Node-red&lt;/strong&gt;  - цей процес описано у статті &lt;a href="https://community.ubos.tech/anastasiia/synchronization-with-three-services-via-node-red-2f59"&gt;Synchronization with three services via Node-red:&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Зареєструвати акаунт в сервсі&lt;/strong&gt; &lt;a href="https://openai.com" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt; та отримати апі ключ.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Створити потік в середовищі Node Red,&lt;/strong&gt; який позволить працювати з ботом.
&lt;img src="https://community.ubos.tech/uploads/articles/8ovzynqp0z1fqng0ciaw.png" alt="Image description" width="1924" height="1043"&gt; 
Для створення даного потоку ми використувоєму наступні вузли:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt; &lt;code&gt;Telegram reciever&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;Telegram sender(3)&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;Function (4)&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;Http request&lt;/code&gt;;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Вузли &lt;code&gt;telegram reieve&lt;/code&gt;r та &lt;code&gt;telegram sender&lt;/code&gt; відповідають лише за отримання та відправку даних в телеграм бот, в них потрібно як описано в статті вище вписати лише токен бота.&lt;/p&gt;

&lt;p&gt;В вузлі &lt;code&gt;Content validation&lt;/code&gt;(function) ми здійснюмо перевірку вхідних даних, по наступним критеріям : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;чи повідомлення містить в собі команду '&lt;strong&gt;/start&lt;/strong&gt;';&lt;/li&gt;
&lt;li&gt;чи тип повідомлення=='&lt;strong&gt;message&lt;/strong&gt;';&lt;/li&gt;
&lt;li&gt;якщо попередні критерії не пройшли перевірку ми завжди вертаємо помилку;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;У випадку якщо повідомлення містить в собі команду '/start' ми відправляємо короткий опис функціонала бота.&lt;br&gt;
У випадку якщо тип повідомлення 'message' ми відправляємо дане повідомлення до серсвісу &lt;a href="https://openai.com" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;, який у відповідь нам відправляє посилання на згенероване моделлю &lt;strong&gt;DALL·E&lt;/strong&gt; зображення і ми відправляємо його у відповідь користувачу.&lt;/p&gt;

&lt;p&gt;Вузол &lt;code&gt;Content validation&lt;/code&gt;(function)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (msg.payload.content.includes('/start')) {
    return [msg, null,null]
}
if (msg.payload.type == "message") { 
    return [null, msg,null]
    }
else{
    return[null,null,msg]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Вузол &lt;code&gt;Send Instruction&lt;/code&gt;(function)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;msg.oldpayload=msg.payload;
msg.payload={};
msg.payload.type = "message";
msg.payload.content = `Напишіть будь ласка боту вашу історію текстовим повідомлення і насолоджуйтесь отриманим зображенням=)`;
msg.payload.chatId = `${msg.oldpayload.chatId}`;
return msg;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Вузол &lt;code&gt;Request to OpenAI&lt;/code&gt;(function)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;msg.oldpayload=msg.payload;
msg.url=`https://api.openai.com/v1/images/generations`;
msg.method="POST";
msg.headers={
'Content-Type': 'application/json',
    'Authorization': env.get("secret_key") /* Ваш Апі Ключ */
}
msg.payload={
    "prompt": msg.oldpayload.content,
    "n": 1,
    "size": "1024x1024"
}

return msg;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Вузол &lt;code&gt;Content Validation failed&lt;/code&gt;(function)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;msg.oldpayload=msg.payload;
msg.payload={};
msg.payload.type = "message";
msg.payload.content = `Error: you can send only text messages`;
msg.payload.chatId = `${msg.oldpayload.chatId}`;
return msg;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Вузол &lt;code&gt;Send Response&lt;/code&gt;(function)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (msg.statusCode==200){
msg.payload.type = "message";
msg.payload.content = `&amp;lt;a href="${msg.payload.data[0].url}"&amp;gt;image link&amp;lt;/a&amp;gt;`;

msg.payload.chatId = `${msg.oldpayload.chatId}`;
msg.payload.options = { parse_mode: "HTML" };
}else{
    msg.payload.type = "message";
    msg.payload.content = `${msg.payload.error.message}`;
    msg.payload.chatId = `${msg.oldpayload.chatId}`;

}
return msg;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Телеграм бота можна знайти в телеграмі за посиланням &lt;a href="https://t.me/ubosaibot" rel="noopener noreferrer"&gt;UBOS.OPEN AI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Приклади використання:&lt;br&gt;
&lt;a href="https://community.ubos.tech/uploads/articles/tihg349osa3c8q2dn961.png" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ubos.tech/uploads/articles/tihg349osa3c8q2dn961.png" alt="Image description" width="1293" height="971"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ubos.tech/uploads/articles/9niugr21on8xheyjklt0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ubos.tech/uploads/articles/9niugr21on8xheyjklt0.png" alt="Image description" width="1291" height="974"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
