Преглед на файлове

[Feat] Add anonymous telemetry to assistant (#924)

Deshraj Yadav преди 1 година
родител
ревизия
0d568c758b
променени са 3 файла, в които са добавени 17 реда и са изтрити 1 реда
  1. 4 0
      docs/get-started/openai-assistant.mdx
  2. 12 0
      embedchain/store/assistants.py
  3. 1 1
      pyproject.toml

+ 4 - 0
docs/get-started/openai-assistant.mdx

@@ -68,6 +68,10 @@ assistant = OpenAIAssistant(assistant_id="asst_xxx", thread_id="thread_xxx")
   Add data sources to your assistant. You can add in the following format: `[{"source": "https://example.com", "data_type": "web_page"}]`
   Add data sources to your assistant. You can add in the following format: `[{"source": "https://example.com", "data_type": "web_page"}]`
 </ResponseField>
 </ResponseField>
 
 
+<ResponseField name="telemetry" type="boolean" default="True">
+  Anonymous telemetry (doesn't collect any user information or user's files). Used to improve the Embedchain package utilization. Default is `True`.
+</ResponseField>
+
 ## Step-2: Add data to thread
 ## Step-2: Add data to thread
 
 
 You can add any custom data source that is supported by Embedchain. Else, you can directly pass the file path on your local system and Embedchain propagates it to OpenAI Assistant.
 You can add any custom data source that is supported by Embedchain. Else, you can directly pass the file path on your local system and Embedchain propagates it to OpenAI Assistant.

+ 12 - 0
embedchain/store/assistants.py

@@ -12,6 +12,7 @@ from openai.types.beta.threads import MessageContentText, ThreadMessage
 from embedchain.config import AddConfig
 from embedchain.config import AddConfig
 from embedchain.data_formatter import DataFormatter
 from embedchain.data_formatter import DataFormatter
 from embedchain.models.data_type import DataType
 from embedchain.models.data_type import DataType
+from embedchain.telemetry.posthog import AnonymousTelemetry
 from embedchain.utils import detect_datatype
 from embedchain.utils import detect_datatype
 
 
 logging.basicConfig(level=logging.WARN)
 logging.basicConfig(level=logging.WARN)
@@ -28,6 +29,7 @@ class OpenAIAssistant:
         data_sources=None,
         data_sources=None,
         assistant_id=None,
         assistant_id=None,
         log_level=logging.WARN,
         log_level=logging.WARN,
+        collect_metrics=True,
     ):
     ):
         self.name = name or "OpenAI Assistant"
         self.name = name or "OpenAI Assistant"
         self.instructions = instructions
         self.instructions = instructions
@@ -38,14 +40,24 @@ class OpenAIAssistant:
         self._client = OpenAI()
         self._client = OpenAI()
         self._initialize_assistant(assistant_id)
         self._initialize_assistant(assistant_id)
         self.thread_id = thread_id or self._create_thread()
         self.thread_id = thread_id or self._create_thread()
+        self._telemetry_props = {"class": self.__class__.__name__}
+        self.telemetry = AnonymousTelemetry(enabled=collect_metrics)
+        self.telemetry.capture(event_name="init", properties=self._telemetry_props)
 
 
     def add(self, source, data_type=None):
     def add(self, source, data_type=None):
         file_path = self._prepare_source_path(source, data_type)
         file_path = self._prepare_source_path(source, data_type)
         self._add_file_to_assistant(file_path)
         self._add_file_to_assistant(file_path)
+
+        event_props = {
+            **self._telemetry_props,
+            "data_type": data_type or detect_datatype(source),
+        }
+        self.telemetry.capture(event_name="add", properties=event_props)
         logging.info("Data successfully added to the assistant.")
         logging.info("Data successfully added to the assistant.")
 
 
     def chat(self, message):
     def chat(self, message):
         self._send_message(message)
         self._send_message(message)
+        self.telemetry.capture(event_name="chat", properties=self._telemetry_props)
         return self._get_latest_response()
         return self._get_latest_response()
 
 
     def delete_thread(self):
     def delete_thread(self):

+ 1 - 1
pyproject.toml

@@ -1,6 +1,6 @@
 [tool.poetry]
 [tool.poetry]
 name = "embedchain"
 name = "embedchain"
-version = "0.1.1"
+version = "0.1.2"
 description = "Data platform for LLMs - Load, index, retrieve and sync any unstructured data"
 description = "Data platform for LLMs - Load, index, retrieve and sync any unstructured data"
 authors = [
 authors = [
     "Taranjeet Singh <taranjeet@embedchain.ai>",
     "Taranjeet Singh <taranjeet@embedchain.ai>",