paid-python 0.3.0__tar.gz → 0.3.2__tar.gz

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 (105) hide show
  1. {paid_python-0.3.0 → paid_python-0.3.2}/PKG-INFO +1 -2
  2. {paid_python-0.3.0 → paid_python-0.3.2}/pyproject.toml +1 -2
  3. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/autoinstrumentation.py +5 -29
  4. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/context_data.py +25 -0
  5. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/distributed_tracing.py +1 -1
  6. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/tracing.py +8 -6
  7. {paid_python-0.3.0 → paid_python-0.3.2}/LICENSE +0 -0
  8. {paid_python-0.3.0 → paid_python-0.3.2}/README.md +0 -0
  9. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/__init__.py +0 -0
  10. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/agents/__init__.py +0 -0
  11. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/agents/client.py +0 -0
  12. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/agents/raw_client.py +0 -0
  13. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/client.py +0 -0
  14. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/contacts/__init__.py +0 -0
  15. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/contacts/client.py +0 -0
  16. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/contacts/raw_client.py +0 -0
  17. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/__init__.py +0 -0
  18. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/api_error.py +0 -0
  19. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/client_wrapper.py +0 -0
  20. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/datetime_utils.py +0 -0
  21. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/file.py +0 -0
  22. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/force_multipart.py +0 -0
  23. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/http_client.py +0 -0
  24. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/http_response.py +0 -0
  25. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/jsonable_encoder.py +0 -0
  26. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/pydantic_utilities.py +0 -0
  27. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/query_encoder.py +0 -0
  28. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/remove_none_from_dict.py +0 -0
  29. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/request_options.py +0 -0
  30. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/core/serialization.py +0 -0
  31. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/customers/__init__.py +0 -0
  32. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/customers/client.py +0 -0
  33. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/customers/raw_client.py +0 -0
  34. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/environment.py +0 -0
  35. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/errors/__init__.py +0 -0
  36. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/errors/bad_request_error.py +0 -0
  37. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/errors/forbidden_error.py +0 -0
  38. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/errors/not_found_error.py +0 -0
  39. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/logger.py +0 -0
  40. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/orders/__init__.py +0 -0
  41. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/orders/client.py +0 -0
  42. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/orders/lines/__init__.py +0 -0
  43. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/orders/lines/client.py +0 -0
  44. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/orders/lines/raw_client.py +0 -0
  45. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/orders/raw_client.py +0 -0
  46. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/py.typed +0 -0
  47. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/__init__.py +0 -0
  48. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/context_manager.py +0 -0
  49. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/signal.py +0 -0
  50. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/__init__.py +0 -0
  51. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/anthropic/__init__.py +0 -0
  52. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/anthropic/anthropicWrapper.py +0 -0
  53. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/bedrock/__init__.py +0 -0
  54. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/bedrock/bedrockWrapper.py +0 -0
  55. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/gemini/__init__.py +0 -0
  56. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/gemini/geminiWrapper.py +0 -0
  57. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/langchain/__init__.py +0 -0
  58. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/langchain/paidLangChainCallback.py +0 -0
  59. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/llamaindex/__init__.py +0 -0
  60. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/llamaindex/llamaIndexWrapper.py +0 -0
  61. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/mistral/__init__.py +0 -0
  62. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/mistral/mistralWrapper.py +0 -0
  63. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/openai/__init__.py +0 -0
  64. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/openai/openAiWrapper.py +0 -0
  65. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/openai_agents/__init__.py +0 -0
  66. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/openai_agents/openaiAgentsHook.py +0 -0
  67. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/tracing/wrappers/utils.py +0 -0
  68. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/__init__.py +0 -0
  69. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/address.py +0 -0
  70. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/agent.py +0 -0
  71. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/agent_attribute.py +0 -0
  72. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/agent_price_point.py +0 -0
  73. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/agent_price_point_tiers.py +0 -0
  74. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/agent_update.py +0 -0
  75. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/api_error.py +0 -0
  76. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/billing_frequency.py +0 -0
  77. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/charge_type.py +0 -0
  78. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/contact.py +0 -0
  79. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/cost_amount.py +0 -0
  80. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/cost_trace.py +0 -0
  81. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/cost_traces_response.py +0 -0
  82. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/creation_source.py +0 -0
  83. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/creation_state.py +0 -0
  84. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/customer.py +0 -0
  85. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/customer_update.py +0 -0
  86. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/entitlement_usage.py +0 -0
  87. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/error.py +0 -0
  88. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/order.py +0 -0
  89. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/order_line.py +0 -0
  90. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/order_line_attribute.py +0 -0
  91. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/order_line_attribute_create.py +0 -0
  92. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/order_line_attribute_pricing.py +0 -0
  93. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/order_line_create.py +0 -0
  94. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/pagination_meta.py +0 -0
  95. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/price_point.py +0 -0
  96. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/pricing.py +0 -0
  97. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/pricing_model_type.py +0 -0
  98. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/salutation.py +0 -0
  99. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/signal.py +0 -0
  100. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/tax_exempt_status.py +0 -0
  101. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/types/tier.py +0 -0
  102. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/usage/__init__.py +0 -0
  103. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/usage/client.py +0 -0
  104. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/usage/raw_client.py +0 -0
  105. {paid_python-0.3.0 → paid_python-0.3.2}/src/paid/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: paid-python
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary:
5
5
  Requires-Python: >=3.9,<3.14
6
6
  Classifier: Intended Audience :: Developers
@@ -25,7 +25,6 @@ Requires-Dist: openinference-instrumentation-openai-agents (>=1.0.0)
25
25
  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
- Requires-Dist: opentelemetry-instrumentation-google-generativeai (>=0.47.0)
29
28
  Requires-Dist: opentelemetry-instrumentation-langchain (>=0.47.0)
30
29
  Requires-Dist: opentelemetry-instrumentation-openai (>=0.47.0)
31
30
  Requires-Dist: opentelemetry-sdk (>=1.23.0)
@@ -3,7 +3,7 @@ name = "paid-python"
3
3
 
4
4
  [tool.poetry]
5
5
  name = "paid-python"
6
- version = "0.3.0"
6
+ version = "0.3.2"
7
7
  description = ""
8
8
  readme = "README.md"
9
9
  authors = []
@@ -44,7 +44,6 @@ opentelemetry-exporter-otlp-proto-http = ">=1.23.0"
44
44
  mutagen = ">=1.47.0"
45
45
  python-dotenv = ">=0.15.0"
46
46
  opentelemetry-instrumentation-anthropic = ">=0.47.0"
47
- opentelemetry-instrumentation-google-generativeai = ">=0.47.0"
48
47
  opentelemetry-instrumentation-openai = ">=0.47.0"
49
48
  opentelemetry-instrumentation-langchain = ">=0.47.0"
50
49
  openinference-instrumentation-openai-agents = ">=1.0.0"
@@ -21,13 +21,6 @@ try:
21
21
  except ImportError:
22
22
  ANTHROPIC_AVAILABLE = False
23
23
 
24
- try:
25
- from opentelemetry.instrumentation.google_generativeai import GoogleGenerativeAiInstrumentor
26
-
27
- GEMINI_AVAILABLE = True
28
- except ImportError:
29
- GEMINI_AVAILABLE = False
30
-
31
24
  try:
32
25
  from opentelemetry.instrumentation.openai import OpenAIInstrumentor
33
26
 
@@ -79,7 +72,6 @@ def paid_autoinstrument(libraries: Optional[List[str]] = None) -> None:
79
72
  Args:
80
73
  libraries: List of library names to instrument. Currently supported:
81
74
  - "anthropic": Anthropic library
82
- - "gemini": Gemini library
83
75
  - "openai": OpenAI library
84
76
  - "openai-agents": OpenAI Agents SDK
85
77
  - "bedrock": AWS Bedrock
@@ -114,7 +106,7 @@ def paid_autoinstrument(libraries: Optional[List[str]] = None) -> None:
114
106
 
115
107
  # Default to all supported libraries if none specified
116
108
  if libraries is None:
117
- libraries = ["anthropic", "gemini", "openai", "openai-agents", "bedrock", "langchain", "google-genai"]
109
+ libraries = ["anthropic", "openai", "openai-agents", "bedrock", "langchain", "google-genai"]
118
110
 
119
111
  for library in libraries:
120
112
  if library in _initialized_instrumentors:
@@ -123,8 +115,6 @@ def paid_autoinstrument(libraries: Optional[List[str]] = None) -> None:
123
115
 
124
116
  if library == "anthropic":
125
117
  _instrument_anthropic()
126
- elif library == "gemini":
127
- _instrument_gemini()
128
118
  elif library == "openai":
129
119
  _instrument_openai()
130
120
  elif library == "openai-agents":
@@ -158,21 +148,6 @@ def _instrument_anthropic() -> None:
158
148
  logger.info("Anthropic auto-instrumentation enabled")
159
149
 
160
150
 
161
- def _instrument_gemini() -> None:
162
- """
163
- Instrument the Google Gemini library using opentelemetry-instrumentation-google-generativeai.
164
- """
165
- if not GEMINI_AVAILABLE:
166
- logger.warning("Gemini library not available, skipping instrumentation")
167
- return
168
-
169
- # Instrument Gemini with Paid's tracer provider
170
- GoogleGenerativeAiInstrumentor().instrument(tracer_provider=tracing.paid_tracer_provider)
171
-
172
- _initialized_instrumentors.append("gemini")
173
- logger.info("Gemini auto-instrumentation enabled")
174
-
175
-
176
151
  def _instrument_openai() -> None:
177
152
  """
178
153
  Instrument the OpenAI library using opentelemetry-instrumentation-openai.
@@ -227,12 +202,14 @@ def _instrument_langchain() -> None:
227
202
  return
228
203
 
229
204
  # Instrument LangChain with Paid's tracer provider
230
- LangchainInstrumentor(disable_trace_context_propagation=True).instrument(tracer_provider=tracing.paid_tracer_provider)
231
-
205
+ LangchainInstrumentor(disable_trace_context_propagation=True).instrument(
206
+ tracer_provider=tracing.paid_tracer_provider
207
+ )
232
208
 
233
209
  _initialized_instrumentors.append("langchain")
234
210
  logger.info("LangChain auto-instrumentation enabled")
235
211
 
212
+
236
213
  def _instrument_google_genai() -> None:
237
214
  """
238
215
  Instrument Google GenAI using openinference-instrumentation-google-genai.
@@ -241,7 +218,6 @@ def _instrument_google_genai() -> None:
241
218
  logger.warning("Google GenAI instrumentation library not available, skipping instrumentation")
242
219
  return
243
220
 
244
-
245
221
  GoogleGenAIInstrumentor().instrument(tracer_provider=tracing.paid_tracer_provider)
246
222
  _initialized_instrumentors.append("google-genai")
247
223
  logger.info("Google GenAI auto-instrumentation enabled")
@@ -44,6 +44,8 @@ class ContextData:
44
44
 
45
45
  @classmethod
46
46
  def set_context_key(cls, key: str, value: Any) -> None:
47
+ if value is None:
48
+ return
47
49
  if key not in cls._context:
48
50
  logger.warning(f"Invalid context key: {key}")
49
51
  return
@@ -51,6 +53,18 @@ class ContextData:
51
53
  reset_tokens = cls._get_or_create_reset_tokens()
52
54
  reset_tokens[key] = reset_token
53
55
 
56
+ @classmethod
57
+ def unset_context_key(cls, key: str) -> None:
58
+ """Unset a specific context key"""
59
+ if key not in cls._context:
60
+ logger.warning(f"Invalid context key: {key}")
61
+ return
62
+ reset_tokens = cls._reset_tokens.get()
63
+ if reset_tokens:
64
+ _ = cls._context[key].set(None)
65
+ if key in reset_tokens:
66
+ del reset_tokens[key]
67
+
54
68
  @classmethod
55
69
  def reset_context(cls) -> None:
56
70
  reset_tokens = cls._reset_tokens.get()
@@ -58,3 +72,14 @@ class ContextData:
58
72
  for key, reset_token in reset_tokens.items():
59
73
  cls._context[key].reset(reset_token)
60
74
  reset_tokens.clear()
75
+
76
+ @classmethod
77
+ def reset_context_key(cls, key: str) -> None:
78
+ """Reset a specific context key to its previous value using the stored reset token."""
79
+ if key not in cls._context:
80
+ logger.warning(f"Invalid context key: {key}")
81
+ return
82
+ reset_tokens = cls._reset_tokens.get()
83
+ if reset_tokens and key in reset_tokens:
84
+ cls._context[key].reset(reset_tokens[key])
85
+ del reset_tokens[key]
@@ -110,4 +110,4 @@ def unset_tracing_token():
110
110
  DeprecationWarning,
111
111
  stacklevel=2,
112
112
  )
113
- ContextData.set_context_key("trace_id", None)
113
+ ContextData.unset_context_key("trace_id")
@@ -73,6 +73,7 @@ class PaidSpanProcessor(SpanProcessor):
73
73
  "gen_ai.response.messages",
74
74
  "llm.output_message",
75
75
  "llm.input_message",
76
+ "llm.invocation_parameters",
76
77
  "output.value",
77
78
  "input.value",
78
79
  }
@@ -137,12 +138,11 @@ class PaidSpanProcessor(SpanProcessor):
137
138
  """Called to force flush. Always returns True since there's nothing to flush."""
138
139
  return True
139
140
 
141
+
140
142
  def setup_graceful_termination():
141
143
  def flush_traces():
142
144
  try:
143
- if not isinstance(paid_tracer_provider, NoOpTracerProvider) and not paid_tracer_provider.force_flush(
144
- 10000
145
- ):
145
+ if not isinstance(paid_tracer_provider, NoOpTracerProvider) and not paid_tracer_provider.force_flush(10000):
146
146
  logger.error("OTEL force flush : timeout reached")
147
147
  except Exception as e:
148
148
  logger.error(f"Error flushing traces: {e}")
@@ -169,8 +169,10 @@ def setup_graceful_termination():
169
169
  for sig in (signal.SIGINT, signal.SIGTERM):
170
170
  signal.signal(sig, create_chained_signal_handler(sig))
171
171
  except Exception as e:
172
- logger.warning(f"Could not set up termination handlers: {e}"
173
- "\nConsider calling initialize_tracing() from the main thread during app initialization if you don't already")
172
+ logger.warning(
173
+ f"Could not set up termination handlers: {e}"
174
+ "\nConsider calling initialize_tracing() from the main thread during app initialization if you don't already"
175
+ )
174
176
 
175
177
 
176
178
  def initialize_tracing(api_key: Optional[str] = None, collector_endpoint: Optional[str] = DEFAULT_COLLECTOR_ENDPOINT):
@@ -220,7 +222,7 @@ def initialize_tracing(api_key: Optional[str] = None, collector_endpoint: Option
220
222
  span_processor = SimpleSpanProcessor(otlp_exporter)
221
223
  paid_tracer_provider.add_span_processor(span_processor)
222
224
 
223
- setup_graceful_termination() # doesn't throw
225
+ setup_graceful_termination() # doesn't throw
224
226
 
225
227
  logger.info("Paid tracing initialized successfully - collector at %s", collector_endpoint)
226
228
  except Exception as e:
File without changes
File without changes