telemetry.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import platform
  2. import sys
  3. from posthog import Posthog
  4. from mem0.memory.setup import get_user_id, setup_config
  5. class AnonymousTelemetry:
  6. def __init__(self, project_api_key, host):
  7. self.posthog = Posthog(project_api_key=project_api_key, host=host)
  8. # Call setup config to ensure that the user_id is generated
  9. setup_config()
  10. self.user_id = get_user_id()
  11. def capture_event(self, event_name, properties=None):
  12. if properties is None:
  13. properties = {}
  14. properties = {
  15. "python_version": sys.version,
  16. "os": sys.platform,
  17. "os_version": platform.version(),
  18. "os_release": platform.release(),
  19. "processor": platform.processor(),
  20. "machine": platform.machine(),
  21. **properties,
  22. }
  23. self.posthog.capture(
  24. distinct_id=self.user_id, event=event_name, properties=properties
  25. )
  26. def identify_user(self, user_id, properties=None):
  27. if properties is None:
  28. properties = {}
  29. self.posthog.identify(distinct_id=user_id, properties=properties)
  30. def close(self):
  31. self.posthog.shutdown()
  32. # Initialize AnonymousTelemetry
  33. telemetry = AnonymousTelemetry(
  34. project_api_key="phc_hgJkUVJFYtmaJqrvf6CYN67TIQ8yhXAkWzUn9AMU4yX",
  35. host="https://us.i.posthog.com",
  36. )
  37. def capture_event(event_name, memory_instance, additional_data=None):
  38. event_data = {
  39. "collection": memory_instance.collection_name,
  40. "vector_size": memory_instance.embedding_model.dims,
  41. "history_store": "sqlite",
  42. "vector_store": f"{memory_instance.vector_store.__class__.__module__}.{memory_instance.vector_store.__class__.__name__}",
  43. "llm": f"{memory_instance.llm.__class__.__module__}.{memory_instance.llm.__class__.__name__}",
  44. "embedding_model": f"{memory_instance.embedding_model.__class__.__module__}.{memory_instance.embedding_model.__class__.__name__}",
  45. "function": f"{memory_instance.__class__.__module__}.{memory_instance.__class__.__name__}",
  46. }
  47. if additional_data:
  48. event_data.update(additional_data)
  49. telemetry.capture_event(event_name, event_data)