revenium-python-sdk 0.4.0__tar.gz → 0.5.0__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 (144) hide show
  1. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/PKG-INFO +50 -1
  2. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/README.md +45 -0
  3. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/pyproject.toml +6 -1
  4. revenium_python_sdk-0.5.0/revenium_middleware/griptape/__init__.py +35 -0
  5. revenium_python_sdk-0.5.0/revenium_middleware/griptape/_metadata.py +10 -0
  6. revenium_python_sdk-0.5.0/revenium_middleware/griptape/anthropic_driver.py +87 -0
  7. revenium_python_sdk-0.5.0/revenium_middleware/griptape/litellm_driver.py +527 -0
  8. revenium_python_sdk-0.5.0/revenium_middleware/griptape/ollama_driver.py +87 -0
  9. revenium_python_sdk-0.5.0/revenium_middleware/griptape/openai_driver.py +133 -0
  10. revenium_python_sdk-0.5.0/revenium_middleware/griptape/openai_embedding_driver.py +121 -0
  11. revenium_python_sdk-0.5.0/revenium_middleware/griptape/universal_driver.py +527 -0
  12. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_python_sdk.egg-info/PKG-INFO +50 -1
  13. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_python_sdk.egg-info/SOURCES.txt +8 -0
  14. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_python_sdk.egg-info/requires.txt +9 -0
  15. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/LICENSE +0 -0
  16. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/__init__.py +0 -0
  17. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/__init__.py +0 -0
  18. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/config.py +0 -0
  19. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/context.py +0 -0
  20. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/decorators.py +0 -0
  21. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/enforcement.py +0 -0
  22. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/exceptions.py +0 -0
  23. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/fields.py +0 -0
  24. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/log_sanitize.py +0 -0
  25. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/metering.py +0 -0
  26. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/metering_buffer.py +0 -0
  27. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/metering_submission.py +0 -0
  28. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/outcomes.py +0 -0
  29. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/patch_registry.py +0 -0
  30. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/prompt_extraction.py +0 -0
  31. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/subscriber.py +0 -0
  32. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_core/trace_fields.py +0 -0
  33. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/LICENSE +0 -0
  34. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/__init__.py +0 -0
  35. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_base_client.py +0 -0
  36. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_client.py +0 -0
  37. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_compat.py +0 -0
  38. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_constants.py +0 -0
  39. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_exceptions.py +0 -0
  40. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_files.py +0 -0
  41. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_models.py +0 -0
  42. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_qs.py +0 -0
  43. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_resource.py +0 -0
  44. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_response.py +0 -0
  45. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_streaming.py +0 -0
  46. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_types.py +0 -0
  47. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/__init__.py +0 -0
  48. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_logs.py +0 -0
  49. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_proxy.py +0 -0
  50. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_reflection.py +0 -0
  51. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_resources_proxy.py +0 -0
  52. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_streams.py +0 -0
  53. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_sync.py +0 -0
  54. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_transform.py +0 -0
  55. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_typing.py +0 -0
  56. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_utils/_utils.py +0 -0
  57. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/_version.py +0 -0
  58. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/context.py +0 -0
  59. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/decorator.py +0 -0
  60. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/py.typed +0 -0
  61. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/resources/__init__.py +0 -0
  62. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/resources/ai.py +0 -0
  63. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/resources/apis.py +0 -0
  64. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/resources/events.py +0 -0
  65. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/__init__.py +0 -0
  66. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/ai_create_audio_params.py +0 -0
  67. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/ai_create_completion_params.py +0 -0
  68. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/ai_create_image_params.py +0 -0
  69. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/ai_create_video_params.py +0 -0
  70. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/api_meter_request_params.py +0 -0
  71. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/api_meter_response_params.py +0 -0
  72. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/event_create_params.py +0 -0
  73. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/_metering/types/metering_response_resource.py +0 -0
  74. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/agentic_outcomes.py +0 -0
  75. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/__init__.py +0 -0
  76. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/bedrock_adapter.py +0 -0
  77. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/bedrock_transport.py +0 -0
  78. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/config.py +0 -0
  79. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/middleware.py +0 -0
  80. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/prompt_extractor.py +0 -0
  81. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/provider.py +0 -0
  82. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/stream_create.py +0 -0
  83. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/anthropic/trace_fields.py +0 -0
  84. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/fal/__init__.py +0 -0
  85. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/fal/_metering.py +0 -0
  86. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/fal/config.py +0 -0
  87. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/fal/middleware.py +0 -0
  88. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/fal/trace_fields.py +0 -0
  89. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/__init__.py +0 -0
  90. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/common/__init__.py +0 -0
  91. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/common/exceptions.py +0 -0
  92. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/common/protocols.py +0 -0
  93. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/common/trace_fields.py +0 -0
  94. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/common/types.py +0 -0
  95. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/common/utils.py +0 -0
  96. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/config.py +0 -0
  97. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/google_ai/__init__.py +0 -0
  98. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/google_ai/middleware.py +0 -0
  99. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/google_ai/provider.py +0 -0
  100. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/prompt_extractor.py +0 -0
  101. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/vertex_ai/__init__.py +0 -0
  102. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/vertex_ai/middleware.py +0 -0
  103. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/google/vertex_ai/provider.py +0 -0
  104. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/job_context.py +0 -0
  105. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/job_history.py +0 -0
  106. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/__init__.py +0 -0
  107. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/__init__.py +0 -0
  108. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/config.py +0 -0
  109. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/context.py +0 -0
  110. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/decorators.py +0 -0
  111. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/hooks.py +0 -0
  112. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/integrations/__init__.py +0 -0
  113. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/integrations/crewai.py +0 -0
  114. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/middleware.py +0 -0
  115. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/trace_fields.py +0 -0
  116. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/client/validation.py +0 -0
  117. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/proxy/__init__.py +0 -0
  118. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/litellm/proxy/middleware.py +0 -0
  119. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/ollama/__init__.py +0 -0
  120. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/ollama/middleware.py +0 -0
  121. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/ollama/trace_fields.py +0 -0
  122. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/__init__.py +0 -0
  123. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/azure_config.py +0 -0
  124. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/azure_model_resolver.py +0 -0
  125. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/config.py +0 -0
  126. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/exceptions.py +0 -0
  127. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/langchain/__init__.py +0 -0
  128. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/langchain/_utils.py +0 -0
  129. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/langchain/unified_handler.py +0 -0
  130. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/middleware.py +0 -0
  131. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/prompt_extractor.py +0 -0
  132. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/provider.py +0 -0
  133. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/openai/trace_fields.py +0 -0
  134. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/perplexity/__init__.py +0 -0
  135. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/perplexity/middleware.py +0 -0
  136. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/perplexity/perplexity_sdk.py +0 -0
  137. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/perplexity/provider.py +0 -0
  138. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/perplexity/trace_fields.py +0 -0
  139. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/webhooks/__init__.py +0 -0
  140. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_middleware/webhooks/_verify.py +0 -0
  141. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_python_sdk.egg-info/dependency_links.txt +0 -0
  142. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/revenium_python_sdk.egg-info/top_level.txt +0 -0
  143. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/setup.cfg +0 -0
  144. {revenium_python_sdk-0.4.0 → revenium_python_sdk-0.5.0}/tests/test_metering.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: revenium-python-sdk
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: The official Revenium Python SDK — unified AI metering middleware for OpenAI, Anthropic, Google, Ollama, LiteLLM, Perplexity, and fal.ai.
5
5
  Author-email: Revenium <support@revenium.io>
6
6
  License: MIT
@@ -36,6 +36,9 @@ Provides-Extra: langchain
36
36
  Requires-Dist: langchain>=0.1.16; extra == "langchain"
37
37
  Requires-Dist: langchain-openai>=0.1.0; extra == "langchain"
38
38
  Requires-Dist: langchain-core>=0.1.0; extra == "langchain"
39
+ Provides-Extra: griptape
40
+ Requires-Dist: griptape<2.0.0,>=1.0.0; python_version >= "3.10" and extra == "griptape"
41
+ Requires-Dist: requests>=2.25.0; extra == "griptape"
39
42
  Provides-Extra: perplexity
40
43
  Requires-Dist: wrapt>=1.14.0; extra == "perplexity"
41
44
  Requires-Dist: python-dotenv>=0.19.0; extra == "perplexity"
@@ -89,6 +92,7 @@ Requires-Dist: python-dotenv>=0.19.0; extra == "dev"
89
92
  Requires-Dist: anthropic>=0.30.0; extra == "dev"
90
93
  Requires-Dist: boto3; extra == "dev"
91
94
  Requires-Dist: ollama>=0.3.0; extra == "dev"
95
+ Requires-Dist: griptape<2.0.0,>=1.0.0; python_version >= "3.10" and extra == "dev"
92
96
  Dynamic: license-file
93
97
 
94
98
  # Revenium Python SDK
@@ -132,6 +136,7 @@ The official Revenium Python SDK — unified AI metering middleware for deeply a
132
136
  | Perplexity (Native SDK) | `perplexity-native` | `pip install revenium-python-sdk[perplexity-native]` |
133
137
  | fal.ai | `fal` | `pip install revenium-python-sdk[fal]` |
134
138
  | LangChain | `langchain` | `pip install revenium-python-sdk[langchain]` |
139
+ | Griptape | `griptape` | `pip install revenium-python-sdk[griptape]` |
135
140
 
136
141
  ## Feature Matrix
137
142
 
@@ -147,6 +152,7 @@ The official Revenium Python SDK — unified AI metering middleware for deeply a
147
152
  | Terminal Summary | Yes | Yes | Yes | Yes | Yes | - | - |
148
153
  | Azure / Bedrock | Azure | Bedrock | Vertex AI | - | All | - | - |
149
154
  | LangChain Integration | Yes | - | - | - | - | - | - |
155
+ | Griptape Integration | Yes | Yes | - | Yes | Yes | - | - |
150
156
  | CrewAI Integration | - | - | - | - | Yes | - | - |
151
157
  | Proxy Mode | - | - | - | - | Yes | - | - |
152
158
 
@@ -959,6 +965,49 @@ Credentials come from the standard environment variables (`REVENIUM_METERING_API
959
965
 
960
966
  ---
961
967
 
968
+ ### Griptape
969
+
970
+ Metered prompt and embedding drivers for [Griptape](https://github.com/griptape-ai/griptape) applications. Requires Python 3.10+.
971
+
972
+ ```bash
973
+ pip install "revenium-python-sdk[griptape,openai]" # OpenAI
974
+ pip install "revenium-python-sdk[griptape,anthropic]" # Anthropic
975
+ pip install "revenium-python-sdk[griptape,ollama]" # Ollama
976
+ pip install "revenium-python-sdk[griptape,litellm,litellm-proxy]" # 100+ providers via LiteLLM
977
+ ```
978
+
979
+ `ReveniumDriver` auto-detects the provider from the model name (`gpt-*` → OpenAI, `claude-*` → Anthropic, `llama`/`mistral`/... → Ollama, anything else → LiteLLM) and wraps the matching Griptape prompt driver with Revenium metering:
980
+
981
+ ```python
982
+ import os
983
+ from griptape.structures import Agent
984
+ from revenium_middleware.griptape import ReveniumDriver
985
+
986
+ os.environ["REVENIUM_METERING_API_KEY"] = "your_revenium_key"
987
+
988
+ agent = Agent(prompt_driver=ReveniumDriver(
989
+ model="gpt-4o-mini",
990
+ usage_metadata={"task_type": "demo"},
991
+ ))
992
+ agent.run("Hello!")
993
+ ```
994
+
995
+ Force a provider with `force_provider="litellm"`, or wrap an existing driver with `ReveniumDriver(base_driver=...)`.
996
+
997
+ **Embeddings:**
998
+
999
+ ```python
1000
+ from revenium_middleware.griptape import ReveniumEmbeddingDriver
1001
+
1002
+ driver = ReveniumEmbeddingDriver(model="text-embedding-3-large")
1003
+ ```
1004
+
1005
+ **Provider-specific drivers:** for direct control, use `ReveniumOpenAiDriver`, `ReveniumAnthropicDriver`, `ReveniumOllamaDriver`, `ReveniumLiteLLMDriver` or `ReveniumOpenAiEmbeddingDriver` — each subclasses the corresponding Griptape driver and accepts a `usage_metadata` dict (see [Metadata Fields](#metadata-fields)).
1006
+
1007
+ **Migrating from `revenium-griptape`:** the standalone package is deprecated — install the `griptape` extra and change `from revenium_griptape import ReveniumDriver` to `from revenium_middleware.griptape import ReveniumDriver`. All driver class names are unchanged. One behaviour difference: the old package called `load_dotenv()` automatically at import time; the SDK never mutates your environment on import, so if you keep credentials in a `.env` file, call `load_dotenv()` yourself before creating a driver.
1008
+
1009
+ ---
1010
+
962
1011
  ## Metadata Fields
963
1012
 
964
1013
  Add business context to any API call by passing a `usage_metadata` dictionary. All fields are optional.
@@ -39,6 +39,7 @@ The official Revenium Python SDK — unified AI metering middleware for deeply a
39
39
  | Perplexity (Native SDK) | `perplexity-native` | `pip install revenium-python-sdk[perplexity-native]` |
40
40
  | fal.ai | `fal` | `pip install revenium-python-sdk[fal]` |
41
41
  | LangChain | `langchain` | `pip install revenium-python-sdk[langchain]` |
42
+ | Griptape | `griptape` | `pip install revenium-python-sdk[griptape]` |
42
43
 
43
44
  ## Feature Matrix
44
45
 
@@ -54,6 +55,7 @@ The official Revenium Python SDK — unified AI metering middleware for deeply a
54
55
  | Terminal Summary | Yes | Yes | Yes | Yes | Yes | - | - |
55
56
  | Azure / Bedrock | Azure | Bedrock | Vertex AI | - | All | - | - |
56
57
  | LangChain Integration | Yes | - | - | - | - | - | - |
58
+ | Griptape Integration | Yes | Yes | - | Yes | Yes | - | - |
57
59
  | CrewAI Integration | - | - | - | - | Yes | - | - |
58
60
  | Proxy Mode | - | - | - | - | Yes | - | - |
59
61
 
@@ -866,6 +868,49 @@ Credentials come from the standard environment variables (`REVENIUM_METERING_API
866
868
 
867
869
  ---
868
870
 
871
+ ### Griptape
872
+
873
+ Metered prompt and embedding drivers for [Griptape](https://github.com/griptape-ai/griptape) applications. Requires Python 3.10+.
874
+
875
+ ```bash
876
+ pip install "revenium-python-sdk[griptape,openai]" # OpenAI
877
+ pip install "revenium-python-sdk[griptape,anthropic]" # Anthropic
878
+ pip install "revenium-python-sdk[griptape,ollama]" # Ollama
879
+ pip install "revenium-python-sdk[griptape,litellm,litellm-proxy]" # 100+ providers via LiteLLM
880
+ ```
881
+
882
+ `ReveniumDriver` auto-detects the provider from the model name (`gpt-*` → OpenAI, `claude-*` → Anthropic, `llama`/`mistral`/... → Ollama, anything else → LiteLLM) and wraps the matching Griptape prompt driver with Revenium metering:
883
+
884
+ ```python
885
+ import os
886
+ from griptape.structures import Agent
887
+ from revenium_middleware.griptape import ReveniumDriver
888
+
889
+ os.environ["REVENIUM_METERING_API_KEY"] = "your_revenium_key"
890
+
891
+ agent = Agent(prompt_driver=ReveniumDriver(
892
+ model="gpt-4o-mini",
893
+ usage_metadata={"task_type": "demo"},
894
+ ))
895
+ agent.run("Hello!")
896
+ ```
897
+
898
+ Force a provider with `force_provider="litellm"`, or wrap an existing driver with `ReveniumDriver(base_driver=...)`.
899
+
900
+ **Embeddings:**
901
+
902
+ ```python
903
+ from revenium_middleware.griptape import ReveniumEmbeddingDriver
904
+
905
+ driver = ReveniumEmbeddingDriver(model="text-embedding-3-large")
906
+ ```
907
+
908
+ **Provider-specific drivers:** for direct control, use `ReveniumOpenAiDriver`, `ReveniumAnthropicDriver`, `ReveniumOllamaDriver`, `ReveniumLiteLLMDriver` or `ReveniumOpenAiEmbeddingDriver` — each subclasses the corresponding Griptape driver and accepts a `usage_metadata` dict (see [Metadata Fields](#metadata-fields)).
909
+
910
+ **Migrating from `revenium-griptape`:** the standalone package is deprecated — install the `griptape` extra and change `from revenium_griptape import ReveniumDriver` to `from revenium_middleware.griptape import ReveniumDriver`. All driver class names are unchanged. One behaviour difference: the old package called `load_dotenv()` automatically at import time; the SDK never mutates your environment on import, so if you keep credentials in a `.env` file, call `load_dotenv()` yourself before creating a driver.
911
+
912
+ ---
913
+
869
914
  ## Metadata Fields
870
915
 
871
916
  Add business context to any API call by passing a `usage_metadata` dictionary. All fields are optional.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "revenium-python-sdk"
7
- version = "0.4.0"
7
+ version = "0.5.0"
8
8
  description = "The official Revenium Python SDK — unified AI metering middleware for OpenAI, Anthropic, Google, Ollama, LiteLLM, Perplexity, and fal.ai."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -51,6 +51,10 @@ langchain = [
51
51
  "langchain-openai>=0.1.0",
52
52
  "langchain-core>=0.1.0",
53
53
  ]
54
+ griptape = [
55
+ "griptape>=1.0.0,<2.0.0; python_version >= '3.10'",
56
+ "requests>=2.25.0",
57
+ ]
54
58
  perplexity = [
55
59
  "wrapt>=1.14.0",
56
60
  "python-dotenv>=0.19.0",
@@ -116,6 +120,7 @@ dev = [
116
120
  "anthropic>=0.30.0",
117
121
  "boto3",
118
122
  "ollama>=0.3.0",
123
+ "griptape>=1.0.0,<2.0.0; python_version >= '3.10'",
119
124
  ]
120
125
 
121
126
  [tool.pytest.ini_options]
@@ -0,0 +1,35 @@
1
+ """
2
+ Revenium metering drivers for the Griptape framework.
3
+
4
+ Universal support for LLM providers through the unified Revenium SDK.
5
+ Install with: pip install "revenium-python-sdk[griptape]"
6
+
7
+ Supported providers:
8
+ - Tier 1 (direct): OpenAI, Anthropic, Ollama
9
+ - Tier 2 (via LiteLLM): Google/Gemini, Cohere, Azure OpenAI, Bedrock, and 100+ others
10
+ """
11
+ try:
12
+ import griptape # noqa: F401
13
+ except ImportError as exc: # pragma: no cover
14
+ raise ImportError(
15
+ "The griptape package is required for revenium_middleware.griptape. "
16
+ "Install it with: pip install 'revenium-python-sdk[griptape]' "
17
+ "(requires Python 3.10+)."
18
+ ) from exc
19
+
20
+ from .universal_driver import ReveniumDriver, ReveniumEmbeddingDriver
21
+ from .openai_driver import ReveniumOpenAiDriver
22
+ from .openai_embedding_driver import ReveniumOpenAiEmbeddingDriver
23
+ from .anthropic_driver import ReveniumAnthropicDriver
24
+ from .ollama_driver import ReveniumOllamaDriver
25
+ from .litellm_driver import ReveniumLiteLLMDriver
26
+
27
+ __all__ = [
28
+ "ReveniumDriver",
29
+ "ReveniumEmbeddingDriver",
30
+ "ReveniumOpenAiDriver",
31
+ "ReveniumOpenAiEmbeddingDriver",
32
+ "ReveniumAnthropicDriver",
33
+ "ReveniumOllamaDriver",
34
+ "ReveniumLiteLLMDriver",
35
+ ]
@@ -0,0 +1,10 @@
1
+ """Shared usage_metadata helpers for the Griptape drivers."""
2
+
3
+ # Keys that would corrupt the middleware's authentication state if they
4
+ # reached a provider API call.
5
+ _AUTH_KEYS = frozenset({"revenium_api_key", "revenium_api_base_url"})
6
+
7
+
8
+ def strip_revenium_auth_keys(metadata):
9
+ """Return a copy of metadata without Revenium auth keys."""
10
+ return {k: v for k, v in metadata.items() if k not in _AUTH_KEYS}
@@ -0,0 +1,87 @@
1
+ """
2
+ Revenium driver for Anthropic/Claude.
3
+
4
+ This driver extends the Griptape AnthropicPromptDriver to automatically inject
5
+ Revenium usage metadata for tracking and cost monitoring.
6
+ """
7
+ import logging
8
+ from typing import Dict, Any, Optional
9
+
10
+ from griptape.drivers.prompt.anthropic import AnthropicPromptDriver
11
+ from griptape.common.prompt_stack.prompt_stack import PromptStack
12
+
13
+ from ._metadata import strip_revenium_auth_keys
14
+
15
+ # Import the Revenium middleware for Anthropic - this auto-patches the anthropic client
16
+ try:
17
+ import revenium_middleware.anthropic # noqa: F401
18
+ MIDDLEWARE_AVAILABLE = True
19
+ except ImportError:
20
+ MIDDLEWARE_AVAILABLE = False
21
+ logging.warning(
22
+ "Anthropic middleware could not be loaded. "
23
+ "Install it with: pip install 'revenium-python-sdk[anthropic]'"
24
+ )
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ class ReveniumAnthropicDriver(AnthropicPromptDriver):
30
+ """
31
+ Anthropic prompt driver with Revenium usage metering.
32
+
33
+ This driver automatically injects usage metadata into Anthropic API calls
34
+ for tracking and cost monitoring through Revenium.
35
+
36
+ Usage metadata is passed through to the LLM API after stripping the
37
+ Revenium auth keys (revenium_api_key, revenium_api_base_url). Do not
38
+ include other secrets in usage_metadata.
39
+ """
40
+
41
+ def __init__(self, usage_metadata: Optional[Dict[str, Any]] = None, **kwargs):
42
+ """
43
+ Initialize the Revenium Anthropic driver.
44
+
45
+ Args:
46
+ usage_metadata: Optional metadata for tracking usage (user_id, task_type, etc.)
47
+ **kwargs: All other arguments passed to AnthropicPromptDriver
48
+ """
49
+ # Store usage metadata as instance variable
50
+ self.usage_metadata = usage_metadata or {}
51
+
52
+ # Initialize parent without usage_metadata
53
+ super().__init__(**kwargs)
54
+
55
+ if not MIDDLEWARE_AVAILABLE:
56
+ logger.warning(
57
+ "Running without the Anthropic middleware. "
58
+ "Usage metering will not be available."
59
+ )
60
+
61
+ def _base_params(self, prompt_stack: PromptStack) -> Dict[str, Any]:
62
+ """
63
+ Build the base parameters for the Anthropic API call.
64
+
65
+ This method extends the base implementation to inject Revenium
66
+ usage metadata while preserving all other functionality.
67
+
68
+ Args:
69
+ prompt_stack: The prompt stack for the request
70
+
71
+ Returns:
72
+ Parameters dictionary for the Anthropic API call
73
+ """
74
+ # Get the base parameters from the parent class
75
+ params = super()._base_params(prompt_stack)
76
+
77
+ # Only inject metadata if middleware is available and we have metadata
78
+ if MIDDLEWARE_AVAILABLE and self.usage_metadata:
79
+ # Copy only business metadata; auth credentials are excluded to
80
+ # prevent corruption of the middleware's authentication state.
81
+ clean_metadata = strip_revenium_auth_keys(self.usage_metadata)
82
+ if clean_metadata:
83
+ # Inject the clean metadata directly into the API call parameters
84
+ params['usage_metadata'] = clean_metadata
85
+ logger.debug(f"Injected usage metadata: {list(clean_metadata.keys())}")
86
+
87
+ return params