scale-gp-beta 0.1.0a26__tar.gz → 0.1.0a28__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 (188) hide show
  1. scale_gp_beta-0.1.0a28/.release-please-manifest.json +3 -0
  2. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/CHANGELOG.md +26 -0
  3. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/PKG-INFO +4 -3
  4. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/README.md +2 -1
  5. scale_gp_beta-0.1.0a28/examples/tracing/3_openai_agent_tracing.py +51 -0
  6. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/pyproject.toml +2 -2
  7. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_base_client.py +9 -2
  8. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_version.py +1 -1
  9. scale_gp_beta-0.1.0a28/src/scale_gp_beta/lib/tracing/integrations/__init__.py +5 -0
  10. scale_gp_beta-0.1.0a28/src/scale_gp_beta/lib/tracing/integrations/openai/openai_span_type_map.py +29 -0
  11. scale_gp_beta-0.1.0a28/src/scale_gp_beta/lib/tracing/integrations/openai/openai_tracing_sgp_processor.py +144 -0
  12. scale_gp_beta-0.1.0a28/src/scale_gp_beta/lib/tracing/integrations/openai/utils.py +68 -0
  13. scale_gp_beta-0.1.0a28/src/scale_gp_beta/py.typed +0 -0
  14. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/spans.py +12 -0
  15. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span.py +1 -0
  16. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span_batch_params.py +1 -0
  17. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span_create_params.py +1 -0
  18. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span_search_params.py +4 -0
  19. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span_upsert_batch_params.py +1 -0
  20. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_spans.py +2 -0
  21. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_client.py +2 -2
  22. scale_gp_beta-0.1.0a26/.release-please-manifest.json +0 -3
  23. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/.gitignore +0 -0
  24. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/CONTRIBUTING.md +0 -0
  25. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/LICENSE +0 -0
  26. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/SECURITY.md +0 -0
  27. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/api.md +0 -0
  28. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/bin/check-release-environment +0 -0
  29. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/bin/publish-pypi +0 -0
  30. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/examples/.keep +0 -0
  31. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/examples/tracing/0_primitives_fibonacci.py +0 -0
  32. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/examples/tracing/1_explicit_use_case.py +0 -0
  33. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/examples/tracing/2_direct_upload.py +0 -0
  34. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/mypy.ini +0 -0
  35. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/noxfile.py +0 -0
  36. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/release-please-config.json +0 -0
  37. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/requirements-dev.lock +0 -0
  38. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/requirements.lock +0 -0
  39. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp/lib/.keep +0 -0
  40. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/__init__.py +0 -0
  41. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_client.py +0 -0
  42. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_compat.py +0 -0
  43. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_constants.py +0 -0
  44. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_exceptions.py +0 -0
  45. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_files.py +0 -0
  46. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_models.py +0 -0
  47. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_qs.py +0 -0
  48. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_resource.py +0 -0
  49. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_response.py +0 -0
  50. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_streaming.py +0 -0
  51. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_types.py +0 -0
  52. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/__init__.py +0 -0
  53. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_logs.py +0 -0
  54. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_proxy.py +0 -0
  55. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_reflection.py +0 -0
  56. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_resources_proxy.py +0 -0
  57. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_streams.py +0 -0
  58. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_sync.py +0 -0
  59. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_transform.py +0 -0
  60. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_typing.py +0 -0
  61. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/_utils/_utils.py +0 -0
  62. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/.keep +0 -0
  63. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/__init__.py +0 -0
  64. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/exceptions.py +0 -0
  65. /scale_gp_beta-0.1.0a26/src/scale_gp_beta/py.typed → /scale_gp_beta-0.1.0a28/src/scale_gp_beta/lib/tracing/integrations/openai/__init__.py +0 -0
  66. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/scope.py +0 -0
  67. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/span.py +0 -0
  68. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/trace.py +0 -0
  69. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/trace_exporter.py +0 -0
  70. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/trace_queue_manager.py +0 -0
  71. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/tracing.py +0 -0
  72. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/types.py +0 -0
  73. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/lib/tracing/util.py +0 -0
  74. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/pagination.py +0 -0
  75. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/__init__.py +0 -0
  76. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/chat/__init__.py +0 -0
  77. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/chat/chat.py +0 -0
  78. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/chat/completions.py +0 -0
  79. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/completions.py +0 -0
  80. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/dataset_items.py +0 -0
  81. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/datasets.py +0 -0
  82. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/evaluation_items.py +0 -0
  83. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/evaluations.py +0 -0
  84. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/files/__init__.py +0 -0
  85. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/files/content.py +0 -0
  86. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/files/files.py +0 -0
  87. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/inference.py +0 -0
  88. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/models.py +0 -0
  89. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/resources/questions.py +0 -0
  90. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/__init__.py +0 -0
  91. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/__init__.py +0 -0
  92. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/chat_completion.py +0 -0
  93. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/chat_completion_chunk.py +0 -0
  94. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/completion_create_params.py +0 -0
  95. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/completion_create_response.py +0 -0
  96. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/completion_models_params.py +0 -0
  97. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/completion_models_response.py +0 -0
  98. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/chat/model_definition.py +0 -0
  99. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/completion.py +0 -0
  100. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/completion_create_params.py +0 -0
  101. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/component.py +0 -0
  102. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/component_param.py +0 -0
  103. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/container.py +0 -0
  104. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/container_param.py +0 -0
  105. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset.py +0 -0
  106. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_create_params.py +0 -0
  107. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_delete_response.py +0 -0
  108. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_item.py +0 -0
  109. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_item_batch_create_params.py +0 -0
  110. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_item_batch_create_response.py +0 -0
  111. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_item_delete_response.py +0 -0
  112. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_item_list_params.py +0 -0
  113. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_item_retrieve_params.py +0 -0
  114. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_item_update_params.py +0 -0
  115. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_list_params.py +0 -0
  116. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_retrieve_params.py +0 -0
  117. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/dataset_update_params.py +0 -0
  118. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation.py +0 -0
  119. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_create_params.py +0 -0
  120. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_delete_response.py +0 -0
  121. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_item.py +0 -0
  122. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_item_list_params.py +0 -0
  123. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_item_retrieve_params.py +0 -0
  124. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_list_params.py +0 -0
  125. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_retrieve_params.py +0 -0
  126. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_task.py +0 -0
  127. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_task_param.py +0 -0
  128. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/evaluation_update_params.py +0 -0
  129. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/file.py +0 -0
  130. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/file_create_params.py +0 -0
  131. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/file_delete_response.py +0 -0
  132. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/file_list.py +0 -0
  133. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/file_list_params.py +0 -0
  134. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/file_update_params.py +0 -0
  135. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/files/__init__.py +0 -0
  136. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/inference_create_params.py +0 -0
  137. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/inference_create_response.py +0 -0
  138. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/inference_model.py +0 -0
  139. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/inference_model_list.py +0 -0
  140. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/inference_response.py +0 -0
  141. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/inference_response_chunk.py +0 -0
  142. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/item_locator.py +0 -0
  143. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/item_locator_template.py +0 -0
  144. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/model_create_params.py +0 -0
  145. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/model_delete_response.py +0 -0
  146. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/model_list_params.py +0 -0
  147. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/model_update_params.py +0 -0
  148. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/question.py +0 -0
  149. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/question_create_params.py +0 -0
  150. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/question_list.py +0 -0
  151. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/question_list_params.py +0 -0
  152. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span_batch_response.py +0 -0
  153. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span_update_params.py +0 -0
  154. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/scale_gp_beta/types/span_upsert_batch_response.py +0 -0
  155. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/src/sgp_dev/lib/.keep +0 -0
  156. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/__init__.py +0 -0
  157. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/__init__.py +0 -0
  158. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/chat/__init__.py +0 -0
  159. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/chat/test_completions.py +0 -0
  160. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/files/__init__.py +0 -0
  161. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/files/test_content.py +0 -0
  162. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_completions.py +0 -0
  163. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_dataset_items.py +0 -0
  164. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_datasets.py +0 -0
  165. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_evaluation_items.py +0 -0
  166. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_evaluations.py +0 -0
  167. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_files.py +0 -0
  168. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_inference.py +0 -0
  169. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_models.py +0 -0
  170. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/api_resources/test_questions.py +0 -0
  171. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/conftest.py +0 -0
  172. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/lib/tracing/test_span.py +0 -0
  173. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/lib/tracing/test_trace.py +0 -0
  174. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/lib/tracing/test_trace_exporter.py +0 -0
  175. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/lib/tracing/test_tracing.py +0 -0
  176. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/sample_file.txt +0 -0
  177. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_deepcopy.py +0 -0
  178. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_extract_files.py +0 -0
  179. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_files.py +0 -0
  180. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_models.py +0 -0
  181. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_qs.py +0 -0
  182. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_required_args.py +0 -0
  183. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_response.py +0 -0
  184. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_streaming.py +0 -0
  185. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_transform.py +0 -0
  186. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_utils/test_proxy.py +0 -0
  187. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/test_utils/test_typing.py +0 -0
  188. {scale_gp_beta-0.1.0a26 → scale_gp_beta-0.1.0a28}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.1.0-alpha.28"
3
+ }
@@ -1,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.28 (2025-07-11)
4
+
5
+ Full Changelog: [v0.1.0-alpha.27...v0.1.0-alpha.28](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.27...v0.1.0-alpha.28)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([63befc8](https://github.com/scaleapi/sgp-python-beta/commit/63befc8168d56b166e43bdcfb804033cce9b1052))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **client:** don't send Content-Type header on GET requests ([9ca896f](https://github.com/scaleapi/sgp-python-beta/commit/9ca896fb0adf0a643cc071ad97a956752d63e42a))
15
+
16
+
17
+ ### Chores
18
+
19
+ * **readme:** fix version rendering on pypi ([f4d2382](https://github.com/scaleapi/sgp-python-beta/commit/f4d23824e3d9238635cbefc406bd525a652ad8cc))
20
+
21
+ ## 0.1.0-alpha.27 (2025-07-10)
22
+
23
+ Full Changelog: [v0.1.0-alpha.26...v0.1.0-alpha.27](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.26...v0.1.0-alpha.27)
24
+
25
+ ### Features
26
+
27
+ * OpenAI subprocessor ([#121](https://github.com/scaleapi/sgp-python-beta/issues/121)) ([321507e](https://github.com/scaleapi/sgp-python-beta/commit/321507e666c4aec253451c670fbf42ff13361dbc))
28
+
3
29
  ## 0.1.0-alpha.26 (2025-07-09)
4
30
 
5
31
  Full Changelog: [v0.1.0-alpha.25...v0.1.0-alpha.26](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.25...v0.1.0-alpha.26)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: scale-gp-beta
3
- Version: 0.1.0a26
3
+ Version: 0.1.0a28
4
4
  Summary: The official Python library for the Scale GP API
5
5
  Project-URL: Homepage, https://github.com/scaleapi/sgp-python-beta
6
6
  Project-URL: Repository, https://github.com/scaleapi/sgp-python-beta
@@ -30,12 +30,13 @@ Requires-Dist: sniffio
30
30
  Requires-Dist: typing-extensions<5,>=4.10
31
31
  Provides-Extra: aiohttp
32
32
  Requires-Dist: aiohttp; extra == 'aiohttp'
33
- Requires-Dist: httpx-aiohttp>=0.1.6; extra == 'aiohttp'
33
+ Requires-Dist: httpx-aiohttp>=0.1.8; extra == 'aiohttp'
34
34
  Description-Content-Type: text/markdown
35
35
 
36
36
  # Scale GP Python API library
37
37
 
38
- [![PyPI version](https://github.com/scaleapi/sgp-python-beta/tree/main/<https://img.shields.io/pypi/v/scale-gp-beta.svg?label=pypi%20(stable)>)](https://pypi.org/project/scale-gp-beta/)
38
+ <!-- prettier-ignore -->
39
+ [![PyPI version](https://img.shields.io/pypi/v/scale-gp-beta.svg?label=pypi%20(stable))](https://pypi.org/project/scale-gp-beta/)
39
40
 
40
41
  The Scale GP Python library provides convenient access to the Scale GP REST API from any Python 3.8+
41
42
  application. The library includes type definitions for all request params and response fields,
@@ -1,6 +1,7 @@
1
1
  # Scale GP Python API library
2
2
 
3
- [![PyPI version](<https://img.shields.io/pypi/v/scale-gp-beta.svg?label=pypi%20(stable)>)](https://pypi.org/project/scale-gp-beta/)
3
+ <!-- prettier-ignore -->
4
+ [![PyPI version](https://img.shields.io/pypi/v/scale-gp-beta.svg?label=pypi%20(stable))](https://pypi.org/project/scale-gp-beta/)
4
5
 
5
6
  The Scale GP Python library provides convenient access to the Scale GP REST API from any Python 3.8+
6
7
  application. The library includes type definitions for all request params and response fields,
@@ -0,0 +1,51 @@
1
+ """
2
+ A simple example demonstrating how to trace an OpenAI Agent run.
3
+
4
+ To run this example:
5
+ 1. Install the necessary packages:
6
+ pip install openai-agents
7
+ 2. Fill in your SGP `api_key` and `account_id`.
8
+ 3. Run the script from your terminal
9
+ """
10
+ import os
11
+ import asyncio
12
+
13
+ try:
14
+ from agents import Agent, Runner, function_tool, set_trace_processors # type: ignore
15
+ except ImportError as e:
16
+ raise ImportError("Please install the required packages: pip install openai-agents") from e
17
+
18
+ import scale_gp_beta.lib.tracing as tracing
19
+ from scale_gp_beta import SGPClient
20
+ from scale_gp_beta.lib.tracing.integrations import OpenAITracingSGPProcessor
21
+
22
+
23
+ @function_tool # type: ignore
24
+ def get_current_weather(city: str) -> str:
25
+ if "san francisco" in city.lower():
26
+ return "The weather in San Francisco is foggy."
27
+ return f"The weather in {city} is sunny."
28
+
29
+
30
+ async def main() -> None:
31
+ weather_agent = Agent( # type: ignore
32
+ name="Weather Agent",
33
+ instructions="You are a helpful assistant that can provide weather information.",
34
+ model="gpt-4-turbo",
35
+ tools=[get_current_weather],
36
+ )
37
+
38
+ result = await Runner.run(weather_agent, "What's the weather like in San Francisco?") # type: ignore
39
+ print("Final Output:", result.final_output) # type: ignore
40
+
41
+
42
+ if __name__ == "__main__":
43
+ api_key = "XXX"
44
+ account_id = "XXX"
45
+ os.environ["OPENAI_API_KEY"] = "XXX"
46
+
47
+ tracing.init(SGPClient(api_key=api_key, account_id=account_id), disabled=False)
48
+
49
+ sgp_processor = OpenAITracingSGPProcessor()
50
+ set_trace_processors([sgp_processor])
51
+ asyncio.run(main())
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "scale-gp-beta"
3
- version = "0.1.0-alpha.26"
3
+ version = "0.1.0-alpha.28"
4
4
  description = "The official Python library for the Scale GP API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -39,7 +39,7 @@ Homepage = "https://github.com/scaleapi/sgp-python-beta"
39
39
  Repository = "https://github.com/scaleapi/sgp-python-beta"
40
40
 
41
41
  [project.optional-dependencies]
42
- aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.6"]
42
+ aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.8"]
43
43
 
44
44
  [tool.rye]
45
45
  managed = true
@@ -529,6 +529,15 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
529
529
  # work around https://github.com/encode/httpx/discussions/2880
530
530
  kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
531
531
 
532
+ is_body_allowed = options.method.lower() != "get"
533
+
534
+ if is_body_allowed:
535
+ kwargs["json"] = json_data if is_given(json_data) else None
536
+ kwargs["files"] = files
537
+ else:
538
+ headers.pop("Content-Type", None)
539
+ kwargs.pop("data", None)
540
+
532
541
  # TODO: report this error to httpx
533
542
  return self._client.build_request( # pyright: ignore[reportUnknownMemberType]
534
543
  headers=headers,
@@ -540,8 +549,6 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
540
549
  # so that passing a `TypedDict` doesn't cause an error.
541
550
  # https://github.com/microsoft/pyright/issues/3526#event-6715453066
542
551
  params=self.qs.stringify(cast(Mapping[str, Any], params)) if params else None,
543
- json=json_data if is_given(json_data) else None,
544
- files=files,
545
552
  **kwargs,
546
553
  )
547
554
 
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "scale_gp_beta"
4
- __version__ = "0.1.0-alpha.26" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.28" # x-release-please-version
@@ -0,0 +1,5 @@
1
+ try:
2
+ from .openai.openai_tracing_sgp_processor import OpenAITracingSGPProcessor # type: ignore[attr-defined]
3
+ __all__ = ["OpenAITracingSGPProcessor"]
4
+ except ImportError:
5
+ pass
@@ -0,0 +1,29 @@
1
+ from typing import Dict, Optional
2
+
3
+ from scale_gp_beta.lib.tracing.types import SpanTypeLiterals
4
+
5
+ OPENAI_SPAN_TYPE_MAP: Dict[str, SpanTypeLiterals] = {
6
+ "generation": "COMPLETION",
7
+ "agent": "AGENT_WORKFLOW",
8
+ "function": "CODE_EXECUTION",
9
+ "response": "COMPLETION",
10
+ "handoff": "CUSTOM",
11
+ "custom": "CUSTOM",
12
+ "guardrail": "STANDALONE",
13
+ "transcription": "STANDALONE",
14
+ "speech": "STANDALONE",
15
+ "speech_group": "STANDALONE",
16
+ "mcp_tools": "STANDALONE",
17
+ }
18
+
19
+
20
+ def openai_span_type_map(span_type: Optional[str]) -> SpanTypeLiterals:
21
+ """
22
+ Maps an OpenAI span type string to its corresponding SGP SpanTypeLiteral.
23
+
24
+ Returns "CUSTOM" if the input is None or not found in the map.
25
+ """
26
+ if not span_type:
27
+ return "CUSTOM"
28
+
29
+ return OPENAI_SPAN_TYPE_MAP.get(span_type, "CUSTOM")
@@ -0,0 +1,144 @@
1
+ # The following `type: ignore` is necessary because this file provides an optional
2
+ # integration for the 'openai-agents' library. The linter will report missing
3
+ # imports if the library isn't installed in the development environment, but the
4
+ # code handles this gracefully at runtime with a try/except block.
5
+ # type: ignore
6
+ import logging
7
+ from typing import TYPE_CHECKING, Any, Dict, Optional
8
+
9
+ from scale_gp_beta.lib.tracing.span import BaseSpan
10
+ from scale_gp_beta.lib.tracing.tracing import create_span, flush_queue, create_trace, tracing_queue_manager
11
+ from scale_gp_beta.lib.tracing.trace_queue_manager import TraceQueueManager
12
+
13
+ from .utils import sgp_span_name, parse_metadata, extract_response, parse_input_output
14
+ from .openai_span_type_map import openai_span_type_map
15
+
16
+ log: logging.Logger = logging.getLogger(__name__)
17
+
18
+ try:
19
+ from agents.tracing import (
20
+ Span as OpenAISpan,
21
+ Trace as OpenAITrace,
22
+ SpanData as OpenAISpanData,
23
+ ResponseSpanData as OpenAIResponseSpanData,
24
+ TracingProcessor,
25
+ )
26
+
27
+ _openai_agents_installed = True
28
+ except ImportError:
29
+ _openai_agents_installed = False
30
+ TracingProcessor = object
31
+ class _Fallback:
32
+ pass
33
+
34
+ OpenAISpan = _Fallback
35
+ OpenAITrace = _Fallback
36
+ OpenAISpanData = _Fallback
37
+ OpenAIResponseSpanData = _Fallback
38
+
39
+ if TYPE_CHECKING:
40
+ OpenAISpan = Any
41
+ OpenAITrace = Any
42
+ OpenAISpanData = Any
43
+ OpenAIResponseSpanData = Any
44
+
45
+
46
+ class OpenAITracingSGPProcessor(TracingProcessor):
47
+ """
48
+ An SGP tracing processor that integrates with OpenAI Agents SDK.
49
+
50
+ This processor requires the 'openai-agents' library to be installed.
51
+ It will raise an ImportError on initialization if the library is not found.
52
+ """
53
+
54
+ def __init__(
55
+ self,
56
+ *,
57
+ queue_manager: Optional[TraceQueueManager] = None,
58
+ ):
59
+ """
60
+ Initializes the processor.
61
+
62
+ Args:
63
+ queue_manager: An optional custom trace queue manager.
64
+
65
+ Raises:
66
+ ImportError: If the 'openai-agents' package is not installed.
67
+ """
68
+ # This runtime check is the gatekeeper. If 'openai-agents' isn't
69
+ # installed, no instance of this class can be created.
70
+ if not _openai_agents_installed:
71
+ raise ImportError(
72
+ "The 'openai-agents' package is required to use the OpenAITracingSGPProcessor. "
73
+ "Please install it with: pip install 'openai-agents'"
74
+ )
75
+
76
+ self._queue_manager = queue_manager or tracing_queue_manager()
77
+ self._spans: Dict[str, BaseSpan] = {}
78
+
79
+ def on_trace_start(self, openai_trace: "OpenAITrace") -> None:
80
+ sgp_trace = create_trace(
81
+ name=openai_trace.name or "Agent Workflow",
82
+ span_type="AGENT_WORKFLOW",
83
+ group_id=openai_trace.group_id,
84
+ trace_id=openai_trace.trace_id,
85
+ metadata={"openai_metadata": openai_trace.metadata or {}},
86
+ )
87
+ sgp_trace.start()
88
+ self._spans[openai_trace.trace_id] = sgp_trace.root_span
89
+
90
+ def on_trace_end(self, openai_trace: "OpenAITrace") -> None:
91
+ root_span = self._spans.pop(openai_trace.trace_id, None)
92
+ if root_span is None:
93
+ log.warning(f"No root span found for trace_id: {openai_trace.trace_id}")
94
+ return
95
+ root_span.end()
96
+
97
+ def on_span_start(self, openai_span: "OpenAISpan") -> None:
98
+ _spans_key = openai_span.parent_id or openai_span.trace_id
99
+ parent_span = self._spans.get(_spans_key)
100
+ span_data = openai_span.span_data
101
+
102
+ if not parent_span:
103
+ log.warning(f"No parent span found for span_id: {openai_span.span_id}")
104
+ return
105
+
106
+ name = sgp_span_name(openai_span)
107
+ sgp_span_type = openai_span_type_map(span_data.type if span_data else None)
108
+
109
+ new_span = create_span(
110
+ name=name,
111
+ span_type=sgp_span_type,
112
+ span_id=openai_span.span_id,
113
+ trace_id=parent_span.trace_id,
114
+ parent_id=parent_span.span_id,
115
+ )
116
+ new_span.start()
117
+ self._spans[openai_span.span_id] = new_span
118
+
119
+ def on_span_end(self, openai_span: "OpenAISpan") -> None:
120
+ sgp_span = self._spans.pop(openai_span.span_id, None)
121
+ if sgp_span is None:
122
+ log.warning(f"No existing span found for span_id: {openai_span.span_id}")
123
+ return
124
+
125
+ # special case response type, if there are more like this we should change arch to support this
126
+ if isinstance(openai_span.span_data, OpenAIResponseSpanData):
127
+ response = extract_response(openai_span)
128
+ sgp_span.input = {"input": openai_span.span_data.input}
129
+ sgp_span.output = {"output": response.get("output", None) if response else None }
130
+ else:
131
+ sgp_span.output = parse_input_output(openai_span, "output")
132
+ sgp_span.input = parse_input_output(openai_span, "input")
133
+
134
+ sgp_span.metadata = parse_metadata(openai_span)
135
+
136
+ if openai_span.error:
137
+ sgp_span.set_error(error_message=str(openai_span.error))
138
+ sgp_span.end()
139
+
140
+ def shutdown(self) -> None:
141
+ self._queue_manager.shutdown()
142
+
143
+ def force_flush(self) -> None:
144
+ flush_queue()
@@ -0,0 +1,68 @@
1
+ # type: ignore
2
+ import json
3
+ from typing import Any, Dict, Optional
4
+
5
+ try:
6
+ from agents.tracing import (
7
+ Span as OpenAISpan,
8
+ ResponseSpanData as OpenAIResponseSpanData,
9
+ )
10
+ except ImportError:
11
+ OpenAISpan = Any
12
+ OpenAIResponseSpanData = Any
13
+
14
+
15
+ def sgp_span_name(openai_span: "OpenAISpan") -> str:
16
+ span_data = openai_span.span_data
17
+ if span_data is None:
18
+ return "Unnamed Span"
19
+ default_name = str(type(span_data).__name__).replace("SpanData", "")
20
+
21
+ return span_data.export().get("name", default_name)
22
+
23
+
24
+ def extract_response(openai_span: "OpenAISpan") -> Optional[Dict[str, Any]]:
25
+ span_data = openai_span.span_data
26
+ if not isinstance(span_data, OpenAIResponseSpanData):
27
+ return None
28
+
29
+ return {} if span_data.response is None else span_data.response.model_dump()
30
+
31
+
32
+ def parse_metadata(openai_span: "OpenAISpan") -> Dict[str, Any]:
33
+ """Extracts and formats metadata from an OpenAI span."""
34
+ if not openai_span.span_data:
35
+ return {}
36
+
37
+ excluded_fields = ("output", "input")
38
+ exported_span_data: dict = openai_span.span_data.export()
39
+ exported_span_data["openai_span_id"] = openai_span.span_id
40
+
41
+ filtered_span_data: dict = {
42
+ k: v for k, v in exported_span_data.items() if k not in excluded_fields
43
+ }
44
+ response = extract_response(openai_span)
45
+ if response is not None:
46
+ filtered_span_data["openai_response"] = response
47
+ return {"openai_metadata": filtered_span_data}
48
+
49
+
50
+ def parse_input_output(openai_span: "OpenAISpan", key: str) -> Dict[str, Any]:
51
+ """
52
+ Safely extracts and parses input/output data from a span.
53
+ The openai-agents SDK sometimes returns this data as a JSON string.
54
+ """
55
+ span_data = openai_span.span_data
56
+ if not span_data:
57
+ return {}
58
+ exported_span_data: dict = span_data.export()
59
+ value: Optional[Any] = exported_span_data.get(key)
60
+ if value is None:
61
+ return {}
62
+
63
+ if isinstance(value, str):
64
+ try:
65
+ return json.loads(value)
66
+ except (json.JSONDecodeError, TypeError):
67
+ return {key: value}
68
+ return {key: value}
File without changes
@@ -91,6 +91,7 @@ class SpansResource(SyncAPIResource):
91
91
  "FILE_RETRIEVAL",
92
92
  "KB_ADD_CHUNK",
93
93
  "KB_MANAGEMENT",
94
+ "GUARDRAIL",
94
95
  "TRACER",
95
96
  "AGENT_TRACER",
96
97
  "AGENT_WORKFLOW",
@@ -283,6 +284,7 @@ class SpansResource(SyncAPIResource):
283
284
  group_id: str | NotGiven = NOT_GIVEN,
284
285
  names: List[str] | NotGiven = NOT_GIVEN,
285
286
  parents_only: bool | NotGiven = NOT_GIVEN,
287
+ search_text: str | NotGiven = NOT_GIVEN,
286
288
  span_id: str | NotGiven = NOT_GIVEN,
287
289
  span_ids: List[str] | NotGiven = NOT_GIVEN,
288
290
  statuses: List[Literal["SUCCESS", "ERROR", "CANCELED"]] | NotGiven = NOT_GIVEN,
@@ -310,6 +312,7 @@ class SpansResource(SyncAPIResource):
310
312
  "FILE_RETRIEVAL",
311
313
  "KB_ADD_CHUNK",
312
314
  "KB_MANAGEMENT",
315
+ "GUARDRAIL",
313
316
  "TRACER",
314
317
  "AGENT_TRACER",
315
318
  "AGENT_WORKFLOW",
@@ -344,6 +347,8 @@ class SpansResource(SyncAPIResource):
344
347
 
345
348
  parents_only: Only fetch spans that are the top-level (ie. have no parent_id)
346
349
 
350
+ search_text: Free text search across span input and output fields
351
+
347
352
  span_id: Filter by span ID (deprecated: use span_ids instead)
348
353
 
349
354
  span_ids: Filter by span IDs
@@ -373,6 +378,7 @@ class SpansResource(SyncAPIResource):
373
378
  "group_id": group_id,
374
379
  "names": names,
375
380
  "parents_only": parents_only,
381
+ "search_text": search_text,
376
382
  "span_id": span_id,
377
383
  "span_ids": span_ids,
378
384
  "statuses": statuses,
@@ -493,6 +499,7 @@ class AsyncSpansResource(AsyncAPIResource):
493
499
  "FILE_RETRIEVAL",
494
500
  "KB_ADD_CHUNK",
495
501
  "KB_MANAGEMENT",
502
+ "GUARDRAIL",
496
503
  "TRACER",
497
504
  "AGENT_TRACER",
498
505
  "AGENT_WORKFLOW",
@@ -685,6 +692,7 @@ class AsyncSpansResource(AsyncAPIResource):
685
692
  group_id: str | NotGiven = NOT_GIVEN,
686
693
  names: List[str] | NotGiven = NOT_GIVEN,
687
694
  parents_only: bool | NotGiven = NOT_GIVEN,
695
+ search_text: str | NotGiven = NOT_GIVEN,
688
696
  span_id: str | NotGiven = NOT_GIVEN,
689
697
  span_ids: List[str] | NotGiven = NOT_GIVEN,
690
698
  statuses: List[Literal["SUCCESS", "ERROR", "CANCELED"]] | NotGiven = NOT_GIVEN,
@@ -712,6 +720,7 @@ class AsyncSpansResource(AsyncAPIResource):
712
720
  "FILE_RETRIEVAL",
713
721
  "KB_ADD_CHUNK",
714
722
  "KB_MANAGEMENT",
723
+ "GUARDRAIL",
715
724
  "TRACER",
716
725
  "AGENT_TRACER",
717
726
  "AGENT_WORKFLOW",
@@ -746,6 +755,8 @@ class AsyncSpansResource(AsyncAPIResource):
746
755
 
747
756
  parents_only: Only fetch spans that are the top-level (ie. have no parent_id)
748
757
 
758
+ search_text: Free text search across span input and output fields
759
+
749
760
  span_id: Filter by span ID (deprecated: use span_ids instead)
750
761
 
751
762
  span_ids: Filter by span IDs
@@ -775,6 +786,7 @@ class AsyncSpansResource(AsyncAPIResource):
775
786
  "group_id": group_id,
776
787
  "names": names,
777
788
  "parents_only": parents_only,
789
+ "search_text": search_text,
778
790
  "span_id": span_id,
779
791
  "span_ids": span_ids,
780
792
  "statuses": statuses,
@@ -70,6 +70,7 @@ class Span(BaseModel):
70
70
  "FILE_RETRIEVAL",
71
71
  "KB_ADD_CHUNK",
72
72
  "KB_MANAGEMENT",
73
+ "GUARDRAIL",
73
74
  "TRACER",
74
75
  "AGENT_TRACER",
75
76
  "AGENT_WORKFLOW",
@@ -69,6 +69,7 @@ class Item(TypedDict, total=False):
69
69
  "FILE_RETRIEVAL",
70
70
  "KB_ADD_CHUNK",
71
71
  "KB_MANAGEMENT",
72
+ "GUARDRAIL",
72
73
  "TRACER",
73
74
  "AGENT_TRACER",
74
75
  "AGENT_WORKFLOW",
@@ -65,6 +65,7 @@ class SpanCreateParams(TypedDict, total=False):
65
65
  "FILE_RETRIEVAL",
66
66
  "KB_ADD_CHUNK",
67
67
  "KB_MANAGEMENT",
68
+ "GUARDRAIL",
68
69
  "TRACER",
69
70
  "AGENT_TRACER",
70
71
  "AGENT_WORKFLOW",
@@ -44,6 +44,9 @@ class SpanSearchParams(TypedDict, total=False):
44
44
  parents_only: bool
45
45
  """Only fetch spans that are the top-level (ie. have no parent_id)"""
46
46
 
47
+ search_text: str
48
+ """Free text search across span input and output fields"""
49
+
47
50
  span_id: str
48
51
  """Filter by span ID (deprecated: use span_ids instead)"""
49
52
 
@@ -81,6 +84,7 @@ class SpanSearchParams(TypedDict, total=False):
81
84
  "FILE_RETRIEVAL",
82
85
  "KB_ADD_CHUNK",
83
86
  "KB_MANAGEMENT",
87
+ "GUARDRAIL",
84
88
  "TRACER",
85
89
  "AGENT_TRACER",
86
90
  "AGENT_WORKFLOW",
@@ -69,6 +69,7 @@ class Item(TypedDict, total=False):
69
69
  "FILE_RETRIEVAL",
70
70
  "KB_ADD_CHUNK",
71
71
  "KB_MANAGEMENT",
72
+ "GUARDRAIL",
72
73
  "TRACER",
73
74
  "AGENT_TRACER",
74
75
  "AGENT_WORKFLOW",
@@ -237,6 +237,7 @@ class TestSpans:
237
237
  group_id="group_id",
238
238
  names=["string"],
239
239
  parents_only=True,
240
+ search_text="search_text",
240
241
  span_id="span_id",
241
242
  span_ids=["string"],
242
243
  statuses=["SUCCESS"],
@@ -535,6 +536,7 @@ class TestAsyncSpans:
535
536
  group_id="group_id",
536
537
  names=["string"],
537
538
  parents_only=True,
539
+ search_text="search_text",
538
540
  span_id="span_id",
539
541
  span_ids=["string"],
540
542
  statuses=["SUCCESS"],
@@ -505,7 +505,7 @@ class TestSGPClient:
505
505
  def test_multipart_repeating_array(self, client: SGPClient) -> None:
506
506
  request = client._build_request(
507
507
  FinalRequestOptions.construct(
508
- method="get",
508
+ method="post",
509
509
  url="/foo",
510
510
  headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"},
511
511
  json_data={"array": ["foo", "bar"]},
@@ -1399,7 +1399,7 @@ class TestAsyncSGPClient:
1399
1399
  def test_multipart_repeating_array(self, async_client: AsyncSGPClient) -> None:
1400
1400
  request = async_client._build_request(
1401
1401
  FinalRequestOptions.construct(
1402
- method="get",
1402
+ method="post",
1403
1403
  url="/foo",
1404
1404
  headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"},
1405
1405
  json_data={"array": ["foo", "bar"]},
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.1.0-alpha.26"
3
- }