posthoganalytics 6.1.1__py3-none-any.whl → 6.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -676,7 +676,7 @@ def shutdown():
676
676
  _proxy("join")
677
677
 
678
678
 
679
- def setup():
679
+ def setup() -> Client:
680
680
  global default_client
681
681
  if not default_client:
682
682
  if not api_key:
@@ -706,6 +706,8 @@ def setup():
706
706
  default_client.disabled = disabled
707
707
  default_client.debug = debug
708
708
 
709
+ return default_client
710
+
709
711
 
710
712
  def _proxy(method, *args, **kwargs):
711
713
  """Create an analytics client if one doesn't exist and send to it."""
@@ -8,7 +8,7 @@ except ImportError:
8
8
 
9
9
  import time
10
10
  import uuid
11
- from typing import Any, Dict, Optional
11
+ from typing import Any, Dict, Optional, cast
12
12
 
13
13
  from posthoganalytics.ai.utils import (
14
14
  call_llm_and_track_usage,
@@ -17,6 +17,7 @@ from posthoganalytics.ai.utils import (
17
17
  with_privacy_mode,
18
18
  )
19
19
  from posthoganalytics.client import Client as PostHogClient
20
+ from posthoganalytics import setup
20
21
 
21
22
 
22
23
  class Anthropic(anthropic.Anthropic):
@@ -26,14 +27,14 @@ class Anthropic(anthropic.Anthropic):
26
27
 
27
28
  _ph_client: PostHogClient
28
29
 
29
- def __init__(self, posthog_client: PostHogClient, **kwargs):
30
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
30
31
  """
31
32
  Args:
32
33
  posthog_client: PostHog client for tracking usage
33
34
  **kwargs: Additional arguments passed to the Anthropic client
34
35
  """
35
36
  super().__init__(**kwargs)
36
- self._ph_client = posthog_client
37
+ self._ph_client = posthog_client or setup()
37
38
  self.messages = WrappedMessages(self)
38
39
 
39
40
 
@@ -10,6 +10,7 @@ import time
10
10
  import uuid
11
11
  from typing import Any, Dict, Optional
12
12
 
13
+ from posthoganalytics import setup
13
14
  from posthoganalytics.ai.utils import (
14
15
  call_llm_and_track_usage_async,
15
16
  get_model_params,
@@ -26,14 +27,14 @@ class AsyncAnthropic(anthropic.AsyncAnthropic):
26
27
 
27
28
  _ph_client: PostHogClient
28
29
 
29
- def __init__(self, posthog_client: PostHogClient, **kwargs):
30
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
30
31
  """
31
32
  Args:
32
33
  posthog_client: PostHog client for tracking usage
33
34
  **kwargs: Additional arguments passed to the Anthropic client
34
35
  """
35
36
  super().__init__(**kwargs)
36
- self._ph_client = posthog_client
37
+ self._ph_client = posthog_client or setup()
37
38
  self.messages = AsyncWrappedMessages(self)
38
39
 
39
40
 
@@ -5,9 +5,12 @@ except ImportError:
5
5
  "Please install the Anthropic SDK to use this feature: 'pip install anthropic'"
6
6
  )
7
7
 
8
+ from typing import Optional
9
+
8
10
  from posthoganalytics.ai.anthropic.anthropic import WrappedMessages
9
11
  from posthoganalytics.ai.anthropic.anthropic_async import AsyncWrappedMessages
10
12
  from posthoganalytics.client import Client as PostHogClient
13
+ from posthoganalytics import setup
11
14
 
12
15
 
13
16
  class AnthropicBedrock(anthropic.AnthropicBedrock):
@@ -17,9 +20,9 @@ class AnthropicBedrock(anthropic.AnthropicBedrock):
17
20
 
18
21
  _ph_client: PostHogClient
19
22
 
20
- def __init__(self, posthog_client: PostHogClient, **kwargs):
23
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
21
24
  super().__init__(**kwargs)
22
- self._ph_client = posthog_client
25
+ self._ph_client = posthog_client or setup()
23
26
  self.messages = WrappedMessages(self)
24
27
 
25
28
 
@@ -30,9 +33,9 @@ class AsyncAnthropicBedrock(anthropic.AsyncAnthropicBedrock):
30
33
 
31
34
  _ph_client: PostHogClient
32
35
 
33
- def __init__(self, posthog_client: PostHogClient, **kwargs):
36
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
34
37
  super().__init__(**kwargs)
35
- self._ph_client = posthog_client
38
+ self._ph_client = posthog_client or setup()
36
39
  self.messages = AsyncWrappedMessages(self)
37
40
 
38
41
 
@@ -43,9 +46,9 @@ class AnthropicVertex(anthropic.AnthropicVertex):
43
46
 
44
47
  _ph_client: PostHogClient
45
48
 
46
- def __init__(self, posthog_client: PostHogClient, **kwargs):
49
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
47
50
  super().__init__(**kwargs)
48
- self._ph_client = posthog_client
51
+ self._ph_client = posthog_client or setup()
49
52
  self.messages = WrappedMessages(self)
50
53
 
51
54
 
@@ -56,7 +59,7 @@ class AsyncAnthropicVertex(anthropic.AsyncAnthropicVertex):
56
59
 
57
60
  _ph_client: PostHogClient
58
61
 
59
- def __init__(self, posthog_client: PostHogClient, **kwargs):
62
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
60
63
  super().__init__(**kwargs)
61
- self._ph_client = posthog_client
64
+ self._ph_client = posthog_client or setup()
62
65
  self.messages = AsyncWrappedMessages(self)
@@ -10,6 +10,7 @@ except ImportError:
10
10
  "Please install the Google Gemini SDK to use this feature: 'pip install google-genai'"
11
11
  )
12
12
 
13
+ from posthoganalytics import setup
13
14
  from posthoganalytics.ai.utils import (
14
15
  call_llm_and_track_usage,
15
16
  get_model_params,
@@ -36,6 +37,8 @@ class Client:
36
37
  )
37
38
  """
38
39
 
40
+ _ph_client: PostHogClient
41
+
39
42
  def __init__(
40
43
  self,
41
44
  api_key: Optional[str] = None,
@@ -56,12 +59,14 @@ class Client:
56
59
  posthog_groups: Default groups for all calls (can be overridden per call)
57
60
  **kwargs: Additional arguments (for future compatibility)
58
61
  """
59
- if posthog_client is None:
62
+ self._ph_client = posthog_client or setup()
63
+
64
+ if self._ph_client is None:
60
65
  raise ValueError("posthog_client is required for PostHog tracking")
61
66
 
62
67
  self.models = Models(
63
68
  api_key=api_key,
64
- posthog_client=posthog_client,
69
+ posthog_client=self._ph_client,
65
70
  posthog_distinct_id=posthog_distinct_id,
66
71
  posthog_properties=posthog_properties,
67
72
  posthog_privacy_mode=posthog_privacy_mode,
@@ -97,10 +102,10 @@ class Models:
97
102
  posthog_groups: Default groups for all calls
98
103
  **kwargs: Additional arguments (for future compatibility)
99
104
  """
100
- if posthog_client is None:
101
- raise ValueError("posthog_client is required for PostHog tracking")
105
+ self._ph_client = posthog_client or setup()
102
106
 
103
- self._ph_client = posthog_client
107
+ if self._ph_client is None:
108
+ raise ValueError("posthog_client is required for PostHog tracking")
104
109
 
105
110
  # Store default PostHog settings
106
111
  self._default_distinct_id = posthog_distinct_id
@@ -15,6 +15,7 @@ from posthoganalytics.ai.utils import (
15
15
  with_privacy_mode,
16
16
  )
17
17
  from posthoganalytics.client import Client as PostHogClient
18
+ from posthoganalytics import setup
18
19
 
19
20
 
20
21
  class OpenAI(openai.OpenAI):
@@ -24,16 +25,15 @@ class OpenAI(openai.OpenAI):
24
25
 
25
26
  _ph_client: PostHogClient
26
27
 
27
- def __init__(self, posthog_client: PostHogClient, **kwargs):
28
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
28
29
  """
29
30
  Args:
30
31
  api_key: OpenAI API key.
31
- posthog_client: If provided, events will be captured via this client instead
32
- of the global posthog.
32
+ posthog_client: If provided, events will be captured via this client instead of the global `posthog`.
33
33
  **openai_config: Any additional keyword args to set on openai (e.g. organization="xxx").
34
34
  """
35
35
  super().__init__(**kwargs)
36
- self._ph_client = posthog_client
36
+ self._ph_client = posthog_client or setup()
37
37
 
38
38
  # Store original objects after parent initialization (only if they exist)
39
39
  self._original_chat = getattr(self, "chat", None)
@@ -1,6 +1,6 @@
1
1
  import time
2
2
  import uuid
3
- from typing import Any, Dict, List, Optional
3
+ from typing import Any, Dict, List, Optional, cast
4
4
 
5
5
  try:
6
6
  import openai
@@ -9,6 +9,7 @@ except ImportError:
9
9
  "Please install the OpenAI SDK to use this feature: 'pip install openai'"
10
10
  )
11
11
 
12
+ from posthoganalytics import setup
12
13
  from posthoganalytics.ai.utils import (
13
14
  call_llm_and_track_usage_async,
14
15
  get_model_params,
@@ -24,7 +25,7 @@ class AsyncOpenAI(openai.AsyncOpenAI):
24
25
 
25
26
  _ph_client: PostHogClient
26
27
 
27
- def __init__(self, posthog_client: PostHogClient, **kwargs):
28
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
28
29
  """
29
30
  Args:
30
31
  api_key: OpenAI API key.
@@ -33,7 +34,7 @@ class AsyncOpenAI(openai.AsyncOpenAI):
33
34
  **openai_config: Any additional keyword args to set on openai (e.g. organization="xxx").
34
35
  """
35
36
  super().__init__(**kwargs)
36
- self._ph_client = posthog_client
37
+ self._ph_client = posthog_client or setup()
37
38
 
38
39
  # Store original objects after parent initialization (only if they exist)
39
40
  self._original_chat = getattr(self, "chat", None)
@@ -15,7 +15,10 @@ from posthoganalytics.ai.openai.openai_async import WrappedBeta as AsyncWrappedB
15
15
  from posthoganalytics.ai.openai.openai_async import WrappedChat as AsyncWrappedChat
16
16
  from posthoganalytics.ai.openai.openai_async import WrappedEmbeddings as AsyncWrappedEmbeddings
17
17
  from posthoganalytics.ai.openai.openai_async import WrappedResponses as AsyncWrappedResponses
18
+ from typing import Optional
19
+
18
20
  from posthoganalytics.client import Client as PostHogClient
21
+ from posthoganalytics import setup
19
22
 
20
23
 
21
24
  class AzureOpenAI(openai.AzureOpenAI):
@@ -25,7 +28,7 @@ class AzureOpenAI(openai.AzureOpenAI):
25
28
 
26
29
  _ph_client: PostHogClient
27
30
 
28
- def __init__(self, posthog_client: PostHogClient, **kwargs):
31
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
29
32
  """
30
33
  Args:
31
34
  api_key: Azure OpenAI API key.
@@ -34,7 +37,7 @@ class AzureOpenAI(openai.AzureOpenAI):
34
37
  **openai_config: Any additional keyword args to set on Azure OpenAI (e.g. azure_endpoint="xxx").
35
38
  """
36
39
  super().__init__(**kwargs)
37
- self._ph_client = posthog_client
40
+ self._ph_client = posthog_client or setup()
38
41
 
39
42
  # Store original objects after parent initialization (only if they exist)
40
43
  self._original_chat = getattr(self, "chat", None)
@@ -63,7 +66,7 @@ class AsyncAzureOpenAI(openai.AsyncAzureOpenAI):
63
66
 
64
67
  _ph_client: PostHogClient
65
68
 
66
- def __init__(self, posthog_client: PostHogClient, **kwargs):
69
+ def __init__(self, posthog_client: Optional[PostHogClient] = None, **kwargs):
67
70
  """
68
71
  Args:
69
72
  api_key: Azure OpenAI API key.
@@ -72,7 +75,7 @@ class AsyncAzureOpenAI(openai.AsyncAzureOpenAI):
72
75
  **openai_config: Any additional keyword args to set on Azure OpenAI (e.g. azure_endpoint="xxx").
73
76
  """
74
77
  super().__init__(**kwargs)
75
- self._ph_client = posthog_client
78
+ self._ph_client = posthog_client or setup()
76
79
 
77
80
  # Store original objects after parent initialization (only if they exist)
78
81
  self._original_chat = getattr(self, "chat", None)
@@ -1,4 +1,4 @@
1
- VERSION = "6.1.1"
1
+ VERSION = "6.2.1"
2
2
 
3
3
  if __name__ == "__main__":
4
4
  print(VERSION, end="") # noqa: T201
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: posthoganalytics
3
- Version: 6.1.1
3
+ Version: 6.2.1
4
4
  Summary: Integrate PostHog into any python application.
5
5
  Home-page: https://github.com/posthog/posthog-python
6
6
  Author: Posthog
@@ -1,4 +1,4 @@
1
- posthoganalytics/__init__.py,sha256=TSi-Hq6mKCAiq6VAjaHPG5g8Pb8FTkK8De_l69O7G74,24096
1
+ posthoganalytics/__init__.py,sha256=N_Mq_RDLFbd02HCMWxJPTtcSYj3NWcartohQKa7MNlw,24133
2
2
  posthoganalytics/args.py,sha256=hRKPQ3cPGyDn4S7Ay9t2NlgoZg1cJ0GeN_Mb6OKtmfo,3145
3
3
  posthoganalytics/client.py,sha256=L_Ive-qlIvflqjLrote0TP2r9jBqbNsQE_Xs7gDEe4Y,65265
4
4
  posthoganalytics/consumer.py,sha256=CiNbJBdyW9jER3ZYCKbX-JFmEDXlE1lbDy1MSl43-a0,4617
@@ -11,21 +11,21 @@ posthoganalytics/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  posthoganalytics/request.py,sha256=TaeySYpcvHMf5Ftf5KqqlO0VPJpirKBCRrThlS04Kew,6124
12
12
  posthoganalytics/types.py,sha256=INxWBOEQc0xgPcap6FdQNSU7zuQBmKShYaGzyuHKql8,9128
13
13
  posthoganalytics/utils.py,sha256=-0w-OLcCaoldkbBebPzQyBzLJSo9G9yBOg8NDVz7La8,16088
14
- posthoganalytics/version.py,sha256=xZhcgW3hzlFW0J_tV0DpBWXhz8E1uxHP1x46lky-cjo,87
14
+ posthoganalytics/version.py,sha256=RTP8N5aq19xMun9DRGgVfdICas7JIcIl1NbwnBdD_0I,87
15
15
  posthoganalytics/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  posthoganalytics/ai/utils.py,sha256=5-2XfmetCs0v9otBoux7-IEG933wAnKLSGS6oYLqCkw,19529
17
17
  posthoganalytics/ai/anthropic/__init__.py,sha256=fFhDOiRzTXzGQlgnrRDL-4yKC8EYIl8NW4a2QNR6xRU,368
18
- posthoganalytics/ai/anthropic/anthropic.py,sha256=5YekQFUio_SRMgdI2y7gbEKFrp-dk1Vi333662doRxc,7328
19
- posthoganalytics/ai/anthropic/anthropic_async.py,sha256=4ncBLLhhPUQ46XzHz6YRlBt-jBBdP6ol-6V_78AmdAY,7448
20
- posthoganalytics/ai/anthropic/anthropic_providers.py,sha256=6gnL_Z43FTar2TGNPDudPXEZawpQfVx7zO4cLndz9r4,1963
18
+ posthoganalytics/ai/anthropic/anthropic.py,sha256=P8o-pZ2rbJXDiHO73OWjO7OgboGiEm_wVY4pbvHnUEs,7397
19
+ posthoganalytics/ai/anthropic/anthropic_async.py,sha256=iAwVlAY6VeW0dGZdMkdfniBTBFUdZZrDMZi-O9vdiuo,7511
20
+ posthoganalytics/ai/anthropic/anthropic_providers.py,sha256=y1_qc8Lbip-YDmpimPGg3DfTm5g-WZk5FrRCXzwF_Ow,2139
21
21
  posthoganalytics/ai/gemini/__init__.py,sha256=bMNBnJ6NO_PCQCwmxKIiw4adFuEQ06hFFBALt-aDW-0,174
22
- posthoganalytics/ai/gemini/gemini.py,sha256=NmVfsG3VaTmDoNCIqXgw2n48H-00zHKfqVY46WFPbEI,13152
22
+ posthoganalytics/ai/gemini/gemini.py,sha256=oi7VIPJLMEHPqRQwvAGwLjkaF0RZhvloCqOJgsQrmJ8,13285
23
23
  posthoganalytics/ai/langchain/__init__.py,sha256=9CqAwLynTGj3ASAR80C3PmdTdrYGmu99tz0JL-HPFgI,70
24
24
  posthoganalytics/ai/langchain/callbacks.py,sha256=qZlHsD8QJiXbvykBIDvNlPa0lQS4zXaxTmZ0R9JHpDQ,28848
25
25
  posthoganalytics/ai/openai/__init__.py,sha256=_flZxkyaDZme9hxJsY31sMlq4nP1dtc75HmNgj-21Kg,197
26
- posthoganalytics/ai/openai/openai.py,sha256=iL_cwctaAhPdXNo4EpIZooOWGyjNj0W-OUEoLchTj9s,23394
27
- posthoganalytics/ai/openai/openai_async.py,sha256=KxPCd5imF5iZ9VkJ12HjCO2skaF1tHsHveAknIqV93g,23769
28
- posthoganalytics/ai/openai/openai_providers.py,sha256=EMuEvdHSOFbrhmfuU0is7pBVWS3ReAUT0PZqgMXdyjk,3884
26
+ posthoganalytics/ai/openai/openai.py,sha256=6bC3OxH9TP7EFkCGQRfxfcormVTAwLP4Wfj3ID3RwEc,23431
27
+ posthoganalytics/ai/openai/openai_async.py,sha256=0gEhTr-ePiOhS8h1WznQDSz_lJm1aferk5K1ZAMo-K0,23838
28
+ posthoganalytics/ai/openai/openai_providers.py,sha256=RPVmj2V0_lAdno_ax5Ul2kwhBA9_rRgAdl_sCqrQc6M,4004
29
29
  posthoganalytics/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  posthoganalytics/integrations/django.py,sha256=KYtBr7CkiZQynRc2TCWWYHe-J3ie8iSUa42WPshYZdc,6795
31
31
  posthoganalytics/test/__init__.py,sha256=VYgM6xPbJbvS-xhIcDiBRs0MFC9V_jT65uNeerCz_rM,299
@@ -42,8 +42,8 @@ posthoganalytics/test/test_request.py,sha256=Zc0VbkjpVmj8mKokQm9rzdgTr0b1U44vvMY
42
42
  posthoganalytics/test/test_size_limited_dict.py,sha256=-5IQjIEr_-Dql24M0HusdR_XroOMrtgiT0v6ZQCRvzo,774
43
43
  posthoganalytics/test/test_types.py,sha256=bRPHdwVpP7hu7emsplU8UVyzSQptv6PaG5lAoOD_BtM,7595
44
44
  posthoganalytics/test/test_utils.py,sha256=sqUTbfweVcxxFRd3WDMFXqPMyU6DvzOBeAOc68Py9aw,9620
45
- posthoganalytics-6.1.1.dist-info/licenses/LICENSE,sha256=wGf9JBotDkSygFj43m49oiKlFnpMnn97keiZKF-40vE,2450
46
- posthoganalytics-6.1.1.dist-info/METADATA,sha256=xrhfLBXcqwgMm1nsVsP5UDPo3nrGC6IZitVt0Dpn5XM,6024
47
- posthoganalytics-6.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
48
- posthoganalytics-6.1.1.dist-info/top_level.txt,sha256=8QsNIqIkBh1p2TXvKp0Em9ZLZKwe3uIqCETyW4s1GOE,17
49
- posthoganalytics-6.1.1.dist-info/RECORD,,
45
+ posthoganalytics-6.2.1.dist-info/licenses/LICENSE,sha256=wGf9JBotDkSygFj43m49oiKlFnpMnn97keiZKF-40vE,2450
46
+ posthoganalytics-6.2.1.dist-info/METADATA,sha256=lXJ9kXdi1F26pQLe0vANlTpvvZNqMiYb2vOEAevWA30,6024
47
+ posthoganalytics-6.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
48
+ posthoganalytics-6.2.1.dist-info/top_level.txt,sha256=8QsNIqIkBh1p2TXvKp0Em9ZLZKwe3uIqCETyW4s1GOE,17
49
+ posthoganalytics-6.2.1.dist-info/RECORD,,