scale-gp-beta 0.1.0a25__tar.gz → 0.1.0a27__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.0a27/.release-please-manifest.json +3 -0
  2. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/CHANGELOG.md +21 -0
  3. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/PKG-INFO +1 -1
  4. scale_gp_beta-0.1.0a27/examples/tracing/3_openai_agent_tracing.py +51 -0
  5. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/pyproject.toml +1 -1
  6. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_models.py +8 -5
  7. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_version.py +1 -1
  8. scale_gp_beta-0.1.0a27/src/scale_gp_beta/lib/tracing/integrations/__init__.py +5 -0
  9. scale_gp_beta-0.1.0a27/src/scale_gp_beta/lib/tracing/integrations/openai/openai_span_type_map.py +29 -0
  10. scale_gp_beta-0.1.0a27/src/scale_gp_beta/lib/tracing/integrations/openai/openai_tracing_sgp_processor.py +144 -0
  11. scale_gp_beta-0.1.0a27/src/scale_gp_beta/lib/tracing/integrations/openai/utils.py +68 -0
  12. scale_gp_beta-0.1.0a27/src/scale_gp_beta/py.typed +0 -0
  13. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/chat_completion.py +1 -1
  14. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/chat_completion_chunk.py +1 -1
  15. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_models.py +45 -0
  16. scale_gp_beta-0.1.0a25/.release-please-manifest.json +0 -3
  17. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/.gitignore +0 -0
  18. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/CONTRIBUTING.md +0 -0
  19. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/LICENSE +0 -0
  20. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/README.md +0 -0
  21. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/SECURITY.md +0 -0
  22. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/api.md +0 -0
  23. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/bin/check-release-environment +0 -0
  24. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/bin/publish-pypi +0 -0
  25. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/examples/.keep +0 -0
  26. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/examples/tracing/0_primitives_fibonacci.py +0 -0
  27. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/examples/tracing/1_explicit_use_case.py +0 -0
  28. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/examples/tracing/2_direct_upload.py +0 -0
  29. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/mypy.ini +0 -0
  30. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/noxfile.py +0 -0
  31. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/release-please-config.json +0 -0
  32. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/requirements-dev.lock +0 -0
  33. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/requirements.lock +0 -0
  34. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp/lib/.keep +0 -0
  35. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/__init__.py +0 -0
  36. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_base_client.py +0 -0
  37. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_client.py +0 -0
  38. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_compat.py +0 -0
  39. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_constants.py +0 -0
  40. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_exceptions.py +0 -0
  41. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_files.py +0 -0
  42. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_qs.py +0 -0
  43. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_resource.py +0 -0
  44. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_response.py +0 -0
  45. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_streaming.py +0 -0
  46. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_types.py +0 -0
  47. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/__init__.py +0 -0
  48. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_logs.py +0 -0
  49. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_proxy.py +0 -0
  50. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_reflection.py +0 -0
  51. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_resources_proxy.py +0 -0
  52. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_streams.py +0 -0
  53. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_sync.py +0 -0
  54. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_transform.py +0 -0
  55. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_typing.py +0 -0
  56. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/_utils/_utils.py +0 -0
  57. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/.keep +0 -0
  58. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/__init__.py +0 -0
  59. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/exceptions.py +0 -0
  60. /scale_gp_beta-0.1.0a25/src/scale_gp_beta/py.typed → /scale_gp_beta-0.1.0a27/src/scale_gp_beta/lib/tracing/integrations/openai/__init__.py +0 -0
  61. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/scope.py +0 -0
  62. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/span.py +0 -0
  63. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/trace.py +0 -0
  64. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/trace_exporter.py +0 -0
  65. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/trace_queue_manager.py +0 -0
  66. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/tracing.py +0 -0
  67. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/types.py +0 -0
  68. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/lib/tracing/util.py +0 -0
  69. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/pagination.py +0 -0
  70. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/__init__.py +0 -0
  71. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/chat/__init__.py +0 -0
  72. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/chat/chat.py +0 -0
  73. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/chat/completions.py +0 -0
  74. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/completions.py +0 -0
  75. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/dataset_items.py +0 -0
  76. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/datasets.py +0 -0
  77. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/evaluation_items.py +0 -0
  78. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/evaluations.py +0 -0
  79. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/files/__init__.py +0 -0
  80. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/files/content.py +0 -0
  81. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/files/files.py +0 -0
  82. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/inference.py +0 -0
  83. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/models.py +0 -0
  84. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/questions.py +0 -0
  85. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/resources/spans.py +0 -0
  86. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/__init__.py +0 -0
  87. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/__init__.py +0 -0
  88. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/completion_create_params.py +0 -0
  89. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/completion_create_response.py +0 -0
  90. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/completion_models_params.py +0 -0
  91. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/completion_models_response.py +0 -0
  92. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/chat/model_definition.py +0 -0
  93. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/completion.py +0 -0
  94. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/completion_create_params.py +0 -0
  95. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/component.py +0 -0
  96. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/component_param.py +0 -0
  97. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/container.py +0 -0
  98. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/container_param.py +0 -0
  99. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset.py +0 -0
  100. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_create_params.py +0 -0
  101. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_delete_response.py +0 -0
  102. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_item.py +0 -0
  103. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_item_batch_create_params.py +0 -0
  104. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_item_batch_create_response.py +0 -0
  105. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_item_delete_response.py +0 -0
  106. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_item_list_params.py +0 -0
  107. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_item_retrieve_params.py +0 -0
  108. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_item_update_params.py +0 -0
  109. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_list_params.py +0 -0
  110. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_retrieve_params.py +0 -0
  111. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/dataset_update_params.py +0 -0
  112. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation.py +0 -0
  113. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_create_params.py +0 -0
  114. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_delete_response.py +0 -0
  115. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_item.py +0 -0
  116. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_item_list_params.py +0 -0
  117. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_item_retrieve_params.py +0 -0
  118. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_list_params.py +0 -0
  119. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_retrieve_params.py +0 -0
  120. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_task.py +0 -0
  121. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_task_param.py +0 -0
  122. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/evaluation_update_params.py +0 -0
  123. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/file.py +0 -0
  124. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/file_create_params.py +0 -0
  125. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/file_delete_response.py +0 -0
  126. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/file_list.py +0 -0
  127. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/file_list_params.py +0 -0
  128. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/file_update_params.py +0 -0
  129. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/files/__init__.py +0 -0
  130. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/inference_create_params.py +0 -0
  131. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/inference_create_response.py +0 -0
  132. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/inference_model.py +0 -0
  133. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/inference_model_list.py +0 -0
  134. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/inference_response.py +0 -0
  135. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/inference_response_chunk.py +0 -0
  136. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/item_locator.py +0 -0
  137. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/item_locator_template.py +0 -0
  138. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/model_create_params.py +0 -0
  139. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/model_delete_response.py +0 -0
  140. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/model_list_params.py +0 -0
  141. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/model_update_params.py +0 -0
  142. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/question.py +0 -0
  143. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/question_create_params.py +0 -0
  144. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/question_list.py +0 -0
  145. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/question_list_params.py +0 -0
  146. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span.py +0 -0
  147. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span_batch_params.py +0 -0
  148. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span_batch_response.py +0 -0
  149. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span_create_params.py +0 -0
  150. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span_search_params.py +0 -0
  151. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span_update_params.py +0 -0
  152. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span_upsert_batch_params.py +0 -0
  153. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/scale_gp_beta/types/span_upsert_batch_response.py +0 -0
  154. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/src/sgp_dev/lib/.keep +0 -0
  155. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/__init__.py +0 -0
  156. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/__init__.py +0 -0
  157. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/chat/__init__.py +0 -0
  158. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/chat/test_completions.py +0 -0
  159. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/files/__init__.py +0 -0
  160. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/files/test_content.py +0 -0
  161. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_completions.py +0 -0
  162. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_dataset_items.py +0 -0
  163. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_datasets.py +0 -0
  164. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_evaluation_items.py +0 -0
  165. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_evaluations.py +0 -0
  166. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_files.py +0 -0
  167. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_inference.py +0 -0
  168. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_models.py +0 -0
  169. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_questions.py +0 -0
  170. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/api_resources/test_spans.py +0 -0
  171. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/conftest.py +0 -0
  172. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/lib/tracing/test_span.py +0 -0
  173. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/lib/tracing/test_trace.py +0 -0
  174. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/lib/tracing/test_trace_exporter.py +0 -0
  175. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/lib/tracing/test_tracing.py +0 -0
  176. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/sample_file.txt +0 -0
  177. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_client.py +0 -0
  178. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_deepcopy.py +0 -0
  179. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_extract_files.py +0 -0
  180. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_files.py +0 -0
  181. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_qs.py +0 -0
  182. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_required_args.py +0 -0
  183. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_response.py +0 -0
  184. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_streaming.py +0 -0
  185. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_transform.py +0 -0
  186. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_utils/test_proxy.py +0 -0
  187. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/test_utils/test_typing.py +0 -0
  188. {scale_gp_beta-0.1.0a25 → scale_gp_beta-0.1.0a27}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.1.0-alpha.27"
3
+ }
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.27 (2025-07-10)
4
+
5
+ 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)
6
+
7
+ ### Features
8
+
9
+ * OpenAI subprocessor ([#121](https://github.com/scaleapi/sgp-python-beta/issues/121)) ([321507e](https://github.com/scaleapi/sgp-python-beta/commit/321507e666c4aec253451c670fbf42ff13361dbc))
10
+
11
+ ## 0.1.0-alpha.26 (2025-07-09)
12
+
13
+ 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)
14
+
15
+ ### Features
16
+
17
+ * **api:** api update ([161a258](https://github.com/scaleapi/sgp-python-beta/commit/161a2581292234a12334743798408e7b099dc2ac))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **parsing:** correctly handle nested discriminated unions ([e4f6af5](https://github.com/scaleapi/sgp-python-beta/commit/e4f6af5f550f10d960866d375d3e354f27c1fea5))
23
+
3
24
  ## 0.1.0-alpha.25 (2025-07-08)
4
25
 
5
26
  Full Changelog: [v0.1.0-alpha.24...v0.1.0-alpha.25](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.24...v0.1.0-alpha.25)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: scale-gp-beta
3
- Version: 0.1.0a25
3
+ Version: 0.1.0a27
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
@@ -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.25"
3
+ version = "0.1.0-alpha.27"
4
4
  description = "The official Python library for the Scale GP API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -2,9 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import inspect
5
- from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, cast
5
+ from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
6
6
  from datetime import date, datetime
7
7
  from typing_extensions import (
8
+ List,
8
9
  Unpack,
9
10
  Literal,
10
11
  ClassVar,
@@ -366,7 +367,7 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object:
366
367
  if type_ is None:
367
368
  raise RuntimeError(f"Unexpected field type is None for {key}")
368
369
 
369
- return construct_type(value=value, type_=type_)
370
+ return construct_type(value=value, type_=type_, metadata=getattr(field, "metadata", None))
370
371
 
371
372
 
372
373
  def is_basemodel(type_: type) -> bool:
@@ -420,7 +421,7 @@ def construct_type_unchecked(*, value: object, type_: type[_T]) -> _T:
420
421
  return cast(_T, construct_type(value=value, type_=type_))
421
422
 
422
423
 
423
- def construct_type(*, value: object, type_: object) -> object:
424
+ def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]] = None) -> object:
424
425
  """Loose coercion to the expected type with construction of nested values.
425
426
 
426
427
  If the given value does not match the expected type then it is returned as-is.
@@ -438,8 +439,10 @@ def construct_type(*, value: object, type_: object) -> object:
438
439
  type_ = type_.__value__ # type: ignore[unreachable]
439
440
 
440
441
  # unwrap `Annotated[T, ...]` -> `T`
441
- if is_annotated_type(type_):
442
- meta: tuple[Any, ...] = get_args(type_)[1:]
442
+ if metadata is not None:
443
+ meta: tuple[Any, ...] = tuple(metadata)
444
+ elif is_annotated_type(type_):
445
+ meta = get_args(type_)[1:]
443
446
  type_ = extract_type_arg(type_, 0)
444
447
  else:
445
448
  meta = tuple()
@@ -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.25" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.27" # 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
@@ -276,7 +276,7 @@ class ChatCompletion(BaseModel):
276
276
 
277
277
  object: Optional[Literal["chat.completion"]] = None
278
278
 
279
- service_tier: Optional[Literal["auto", "default", "flex", "scale"]] = None
279
+ service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] = None
280
280
 
281
281
  system_fingerprint: Optional[str] = None
282
282
 
@@ -227,7 +227,7 @@ class ChatCompletionChunk(BaseModel):
227
227
 
228
228
  object: Optional[Literal["chat.completion.chunk"]] = None
229
229
 
230
- service_tier: Optional[Literal["auto", "default", "flex", "scale"]] = None
230
+ service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] = None
231
231
 
232
232
  system_fingerprint: Optional[str] = None
233
233
 
@@ -889,3 +889,48 @@ def test_discriminated_union_case() -> None:
889
889
  )
890
890
 
891
891
  assert isinstance(m, ModelB)
892
+
893
+
894
+ def test_nested_discriminated_union() -> None:
895
+ class InnerType1(BaseModel):
896
+ type: Literal["type_1"]
897
+
898
+ class InnerModel(BaseModel):
899
+ inner_value: str
900
+
901
+ class InnerType2(BaseModel):
902
+ type: Literal["type_2"]
903
+ some_inner_model: InnerModel
904
+
905
+ class Type1(BaseModel):
906
+ base_type: Literal["base_type_1"]
907
+ value: Annotated[
908
+ Union[
909
+ InnerType1,
910
+ InnerType2,
911
+ ],
912
+ PropertyInfo(discriminator="type"),
913
+ ]
914
+
915
+ class Type2(BaseModel):
916
+ base_type: Literal["base_type_2"]
917
+
918
+ T = Annotated[
919
+ Union[
920
+ Type1,
921
+ Type2,
922
+ ],
923
+ PropertyInfo(discriminator="base_type"),
924
+ ]
925
+
926
+ model = construct_type(
927
+ type_=T,
928
+ value={
929
+ "base_type": "base_type_1",
930
+ "value": {
931
+ "type": "type_2",
932
+ },
933
+ },
934
+ )
935
+ assert isinstance(model, Type1)
936
+ assert isinstance(model.value, InnerType2)
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.1.0-alpha.25"
3
- }