Explorar el Código

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

Deshraj Yadav hace 1 año
padre
commit
0d568c758b
Se han modificado 3 ficheros con 17 adiciones y 1 borrados
  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"}]`
 </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
 
 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.data_formatter import DataFormatter
 from embedchain.models.data_type import DataType
+from embedchain.telemetry.posthog import AnonymousTelemetry
 from embedchain.utils import detect_datatype
 
 logging.basicConfig(level=logging.WARN)
@@ -28,6 +29,7 @@ class OpenAIAssistant:
         data_sources=None,
         assistant_id=None,
         log_level=logging.WARN,
+        collect_metrics=True,
     ):
         self.name = name or "OpenAI Assistant"
         self.instructions = instructions
@@ -38,14 +40,24 @@ class OpenAIAssistant:
         self._client = OpenAI()
         self._initialize_assistant(assistant_id)
         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):
         file_path = self._prepare_source_path(source, data_type)
         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.")
 
     def chat(self, message):
         self._send_message(message)
+        self.telemetry.capture(event_name="chat", properties=self._telemetry_props)
         return self._get_latest_response()
 
     def delete_thread(self):

+ 1 - 1
pyproject.toml

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