paid-python 0.3.3__py3-none-any.whl → 0.3.5__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.
Files changed (26) hide show
  1. paid/_vendor/__init__.py +0 -0
  2. paid/_vendor/opentelemetry/__init__.py +0 -0
  3. paid/_vendor/opentelemetry/instrumentation/__init__.py +0 -0
  4. paid/_vendor/opentelemetry/instrumentation/openai/__init__.py +54 -0
  5. paid/_vendor/opentelemetry/instrumentation/openai/shared/__init__.py +399 -0
  6. paid/_vendor/opentelemetry/instrumentation/openai/shared/chat_wrappers.py +1192 -0
  7. paid/_vendor/opentelemetry/instrumentation/openai/shared/completion_wrappers.py +292 -0
  8. paid/_vendor/opentelemetry/instrumentation/openai/shared/config.py +15 -0
  9. paid/_vendor/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py +311 -0
  10. paid/_vendor/opentelemetry/instrumentation/openai/shared/event_emitter.py +108 -0
  11. paid/_vendor/opentelemetry/instrumentation/openai/shared/event_models.py +41 -0
  12. paid/_vendor/opentelemetry/instrumentation/openai/shared/image_gen_wrappers.py +68 -0
  13. paid/_vendor/opentelemetry/instrumentation/openai/shared/span_utils.py +0 -0
  14. paid/_vendor/opentelemetry/instrumentation/openai/utils.py +190 -0
  15. paid/_vendor/opentelemetry/instrumentation/openai/v0/__init__.py +176 -0
  16. paid/_vendor/opentelemetry/instrumentation/openai/v1/__init__.py +358 -0
  17. paid/_vendor/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py +329 -0
  18. paid/_vendor/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py +134 -0
  19. paid/_vendor/opentelemetry/instrumentation/openai/v1/responses_wrappers.py +996 -0
  20. paid/_vendor/opentelemetry/instrumentation/openai/version.py +1 -0
  21. paid/tracing/autoinstrumentation.py +2 -1
  22. paid/tracing/tracing.py +8 -2
  23. {paid_python-0.3.3.dist-info → paid_python-0.3.5.dist-info}/METADATA +51 -2
  24. {paid_python-0.3.3.dist-info → paid_python-0.3.5.dist-info}/RECORD +26 -6
  25. {paid_python-0.3.3.dist-info → paid_python-0.3.5.dist-info}/LICENSE +0 -0
  26. {paid_python-0.3.3.dist-info → paid_python-0.3.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1 @@
1
+ __version__ = "0.48.1"
@@ -22,7 +22,8 @@ except ImportError:
22
22
  ANTHROPIC_AVAILABLE = False
23
23
 
24
24
  try:
25
- from opentelemetry.instrumentation.openai import OpenAIInstrumentor
25
+ # from opentelemetry.instrumentation.openai import OpenAIInstrumentor
26
+ from paid._vendor.opentelemetry.instrumentation.openai import OpenAIInstrumentor # remove once openai instrumentor is upstream
26
27
 
27
28
  OPENAI_AVAILABLE = True
28
29
  except ImportError:
paid/tracing/tracing.py CHANGED
@@ -141,7 +141,7 @@ class PaidSpanProcessor(SpanProcessor):
141
141
  return True
142
142
 
143
143
 
144
- def setup_graceful_termination():
144
+ def setup_graceful_termination(paid_tracer_provider: TracerProvider):
145
145
  def flush_traces():
146
146
  try:
147
147
  if not isinstance(paid_tracer_provider, NoOpTracerProvider) and not paid_tracer_provider.force_flush(10000):
@@ -191,6 +191,12 @@ def initialize_tracing(api_key: Optional[str] = None, collector_endpoint: Option
191
191
  collector_endpoint = DEFAULT_COLLECTOR_ENDPOINT
192
192
 
193
193
  try:
194
+ # Check if tracing is disabled via environment variable
195
+ paid_enabled = os.environ.get("PAID_ENABLED", "true").lower()
196
+ if paid_enabled == "false":
197
+ logger.info("Paid tracing is disabled via PAID_ENABLED environment variable")
198
+ return
199
+
194
200
  if get_token() is not None:
195
201
  logger.warning("Tracing is already initialized - skipping re-initialization")
196
202
  return
@@ -224,7 +230,7 @@ def initialize_tracing(api_key: Optional[str] = None, collector_endpoint: Option
224
230
  span_processor = SimpleSpanProcessor(otlp_exporter)
225
231
  paid_tracer_provider.add_span_processor(span_processor)
226
232
 
227
- setup_graceful_termination() # doesn't throw
233
+ setup_graceful_termination(paid_tracer_provider) # doesn't throw
228
234
 
229
235
  logger.info("Paid tracing initialized successfully - collector at %s", collector_endpoint)
230
236
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: paid-python
3
- Version: 0.3.3
3
+ Version: 0.3.5
4
4
  Summary:
5
5
  Requires-Python: >=3.9,<3.14
6
6
  Classifier: Intended Audience :: Developers
@@ -26,7 +26,6 @@ Requires-Dist: opentelemetry-api (>=1.23.0)
26
26
  Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.23.0)
27
27
  Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.47.0)
28
28
  Requires-Dist: opentelemetry-instrumentation-langchain (>=0.47.0)
29
- Requires-Dist: opentelemetry-instrumentation-openai (>=0.47.0)
30
29
  Requires-Dist: opentelemetry-sdk (>=1.23.0)
31
30
  Requires-Dist: pydantic (>=1.9.0)
32
31
  Requires-Dist: pydantic-core (>=2.18.0)
@@ -123,6 +122,56 @@ export PAID_LOG_LEVEL=DEBUG
123
122
 
124
123
  Defaults to ERROR.
125
124
 
125
+ ## Environment Variables
126
+
127
+ The Paid SDK supports the following environment variables for configuration:
128
+
129
+ ### `PAID_API_KEY`
130
+
131
+ Your Paid API key for authentication. This is used as a fallback when you don't explicitly pass the `token` parameter to the `Paid()` client or `initialize_tracing()`.
132
+
133
+ ```bash
134
+ export PAID_API_KEY="your_api_key_here"
135
+ ```
136
+
137
+ You can then initialize the client without passing the token:
138
+
139
+ ```python
140
+ from paid import Paid
141
+
142
+ # API key is read from PAID_API_KEY environment variable
143
+ client = Paid()
144
+ ```
145
+
146
+ ### `PAID_ENABLED`
147
+
148
+ Controls whether Paid tracing is enabled. Set to `false` (case-insensitive) to disable all tracing functionality.
149
+
150
+ ```bash
151
+ export PAID_ENABLED=false
152
+ ```
153
+
154
+ This is useful for:
155
+ - Development/testing environments where tracing isn't needed
156
+ - Temporarily disabling tracing without modifying code
157
+ - Feature flagging in different deployment environments
158
+
159
+ Defaults to `true` if not set.
160
+
161
+ ### `PAID_LOG_LEVEL`
162
+
163
+ Sets the logging level for Paid SDK operations. See the [Logging](#logging) section for details.
164
+
165
+ ### `PAID_OTEL_COLLECTOR_ENDPOINT`
166
+
167
+ Overrides the default OpenTelemetry collector endpoint URL. Only needed if you want to route traces to a custom endpoint.
168
+
169
+ ```bash
170
+ export PAID_OTEL_COLLECTOR_ENDPOINT="https://your-custom-endpoint.com:4318/v1/traces"
171
+ ```
172
+
173
+ Defaults to `https://collector.agentpaid.io:4318/v1/traces`.
174
+
126
175
  ## Cost Tracking via OTEL tracing
127
176
 
128
177
  ### Simple Decorator and Context Manager Methods
@@ -1,4 +1,24 @@
1
1
  paid/__init__.py,sha256=D1SeLoeTlySo_vZCZrxFX3y5KhKGrHflphLXoewImfk,1826
2
+ paid/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ paid/_vendor/opentelemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ paid/_vendor/opentelemetry/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ paid/_vendor/opentelemetry/instrumentation/openai/__init__.py,sha256=pCv_Z7FJVlR7XumomPX6AAmuIFDzik_PeAA6rpkgO80,2171
6
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/__init__.py,sha256=hpn2hQFg-VnXdNaXJHd8CKDCBx5P4gTOqsrlOD8ispQ,12731
7
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/chat_wrappers.py,sha256=X8Wu8zdXmOCCC1Cu-tpiOTZUdK2dKAd_Uhc8URjTwXc,40552
8
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/completion_wrappers.py,sha256=gNzYfU6niiRmx-qkz39nV_hWBZjk1g4GYFC8KamDBXs,9418
9
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/config.py,sha256=xMSz47vDPboU3Vciulf6lZkyWXTFA6eaLJHk-tYfkus,479
10
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py,sha256=lswpTs4aqH_7tchfHEFcp7rDsmmN4y_wTiV2Fn_iAGQ,9429
11
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/event_emitter.py,sha256=hxZ1y3Ie8e_mUq655jDDMIZ1ko49QsRUVuHMPQdESlE,3263
12
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/event_models.py,sha256=PCfCGxrrArwZqR-4wFcXrhwQq0sBMAxmSrpC4PUMtaM,876
13
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/image_gen_wrappers.py,sha256=E_fRtkqHAX9tWIsBKCbd4jSIlgCKipaH7vGhLMrlQZI,2159
14
+ paid/_vendor/opentelemetry/instrumentation/openai/shared/span_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ paid/_vendor/opentelemetry/instrumentation/openai/utils.py,sha256=i-HqIUMNf6lIvfj9dBarCEWzFquEU5Ak7_O9hzPrRVg,5106
16
+ paid/_vendor/opentelemetry/instrumentation/openai/v0/__init__.py,sha256=SWemnoZhnXwoSb0qZ5H_dpnTFtCryyfpAGmhMuUJAbs,6393
17
+ paid/_vendor/opentelemetry/instrumentation/openai/v1/__init__.py,sha256=sEf6lTWoIIxkdmOeqyaYiZzq2DP-lpjudygCddzE7Ww,13334
18
+ paid/_vendor/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py,sha256=EOwYdg4GbQ4TMnGrGNABwNyhoYNanPyrYRKqNMELhl0,11538
19
+ paid/_vendor/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py,sha256=tzTKrKEXZMuSr98G4A-s10YHIJPzKvxkvck9ZrPnFZk,4462
20
+ paid/_vendor/opentelemetry/instrumentation/openai/v1/responses_wrappers.py,sha256=XfBeUfzzrxOEvEkXFHFkaMYMHoARL6qkjjGu0o96hAs,38538
21
+ paid/_vendor/opentelemetry/instrumentation/openai/version.py,sha256=BlW7lOSPQf4pAwU6T5nih5Vp6GJ_QyPSV_8_zA7WSp0,23
2
22
  paid/agents/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
3
23
  paid/agents/client.py,sha256=ojc3H-nx4MqDrb74_i6JE_wjHSJaVAErsIunfNeffMo,23305
4
24
  paid/agents/raw_client.py,sha256=jN9LvPK2-bGeNQzcV3iRmprpegXKtO2JaOEXjnPfz9Y,26833
@@ -37,12 +57,12 @@ paid/orders/lines/raw_client.py,sha256=KZN_yBokCOkf1lUb4ZJtX_NZbqmTqCdJNoaIOdWar
37
57
  paid/orders/raw_client.py,sha256=650e1Sj2vi9KVJc15M3ENXIKYoth0qMz66dzvXy1Sb4,16245
38
58
  paid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
59
  paid/tracing/__init__.py,sha256=Pe55koIwqJ6Vv5-9Wqi8xIdwCS2BbxZds-MK5fD-F5Y,506
40
- paid/tracing/autoinstrumentation.py,sha256=J1v1YNR6fISd0B-P9MPwWQGVqJ309PuYfaUHsfqGUGk,7650
60
+ paid/tracing/autoinstrumentation.py,sha256=Vdd0PrjLSzyxXujY45S9a0tAKjtLs8-SHbg81v23WkY,7784
41
61
  paid/tracing/context_data.py,sha256=oiLocz-9qDqB5nQzJlrLsc2Mkr9MaNt_yF_hjppobKc,3298
42
62
  paid/tracing/context_manager.py,sha256=ZQtsJ9JPxTwn2t4AW26WpYboaOEZdI2T1Sw0Rwsbf-E,8470
43
63
  paid/tracing/distributed_tracing.py,sha256=Vht3U8QJmT5jlRVnrybTn-cI1RPuVtyb3V4eTu6gA4g,3991
44
64
  paid/tracing/signal.py,sha256=PfYxF6EFQS8j7RY5_C5NXrCBVu9Hq2E2tyG4fdQScJk,3252
45
- paid/tracing/tracing.py,sha256=HnQjLTfvrEqL_44pXGo-fYh8KXlWBh0ozp3omB6wuTI,14848
65
+ paid/tracing/tracing.py,sha256=0eMY357by892_32a2qCT6nRCUOHt03gxKCmUH2wDjVg,15184
46
66
  paid/tracing/wrappers/__init__.py,sha256=IIleLB_JUbzLw7FshrU2VHZAKF3dZHMGy1O5zCBwwqM,1588
47
67
  paid/tracing/wrappers/anthropic/__init__.py,sha256=_x1fjySAQxuT5cIGO_jU09LiGcZH-WQLqKg8mUFAu2w,115
48
68
  paid/tracing/wrappers/anthropic/anthropicWrapper.py,sha256=pGchbOb41CbTxc7H8xXoM-LjR085spqrzXqCVC_rrFk,4913
@@ -99,7 +119,7 @@ paid/usage/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
99
119
  paid/usage/client.py,sha256=280WJuepoovk3BAVbAx2yN2Q_qBdvx3CcPkLu8lXslc,3030
100
120
  paid/usage/raw_client.py,sha256=2acg5C4lxuZodZjepU9QYF0fmBxgG-3ZgXs1zUJG-wM,3709
101
121
  paid/version.py,sha256=QIpDFnOrxMxrs86eL0iNH0mSZ1DO078wWHYY9TYAoew,78
102
- paid_python-0.3.3.dist-info/LICENSE,sha256=Nz4baY1zvv0Qy7lqrQtbaiMhmEeGr2Q7A93aqzpml4c,1071
103
- paid_python-0.3.3.dist-info/METADATA,sha256=tb9zMnJfciOmVMIwq6G2_R70gk3djrPpXnI50Uootiw,22335
104
- paid_python-0.3.3.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
105
- paid_python-0.3.3.dist-info/RECORD,,
122
+ paid_python-0.3.5.dist-info/LICENSE,sha256=Nz4baY1zvv0Qy7lqrQtbaiMhmEeGr2Q7A93aqzpml4c,1071
123
+ paid_python-0.3.5.dist-info/METADATA,sha256=V99x_8mHOv0uUo6pwD7rcf2AEOYhSouqgMlJZAawyDI,23632
124
+ paid_python-0.3.5.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
125
+ paid_python-0.3.5.dist-info/RECORD,,