scale-gp-beta 0.1.0a23__tar.gz → 0.1.0a24__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 (177) hide show
  1. scale_gp_beta-0.1.0a24/.release-please-manifest.json +3 -0
  2. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/CHANGELOG.md +9 -0
  3. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/PKG-INFO +1 -1
  4. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/pyproject.toml +1 -1
  5. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_version.py +1 -1
  6. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/span.py +84 -53
  7. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/trace_queue_manager.py +7 -3
  8. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/tracing.py +9 -3
  9. scale_gp_beta-0.1.0a23/.release-please-manifest.json +0 -3
  10. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/.gitignore +0 -0
  11. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/CONTRIBUTING.md +0 -0
  12. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/LICENSE +0 -0
  13. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/README.md +0 -0
  14. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/SECURITY.md +0 -0
  15. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/api.md +0 -0
  16. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/bin/check-release-environment +0 -0
  17. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/bin/publish-pypi +0 -0
  18. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/examples/.keep +0 -0
  19. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/examples/tracing/0_primitives_fibonacci.py +0 -0
  20. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/examples/tracing/1_explicit_use_case.py +0 -0
  21. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/examples/tracing/2_direct_upload.py +0 -0
  22. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/mypy.ini +0 -0
  23. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/noxfile.py +0 -0
  24. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/release-please-config.json +0 -0
  25. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/requirements-dev.lock +0 -0
  26. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/requirements.lock +0 -0
  27. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp/lib/.keep +0 -0
  28. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/__init__.py +0 -0
  29. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_base_client.py +0 -0
  30. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_client.py +0 -0
  31. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_compat.py +0 -0
  32. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_constants.py +0 -0
  33. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_exceptions.py +0 -0
  34. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_files.py +0 -0
  35. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_models.py +0 -0
  36. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_qs.py +0 -0
  37. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_resource.py +0 -0
  38. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_response.py +0 -0
  39. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_streaming.py +0 -0
  40. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_types.py +0 -0
  41. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/__init__.py +0 -0
  42. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_logs.py +0 -0
  43. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_proxy.py +0 -0
  44. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_reflection.py +0 -0
  45. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_resources_proxy.py +0 -0
  46. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_streams.py +0 -0
  47. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_sync.py +0 -0
  48. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_transform.py +0 -0
  49. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_typing.py +0 -0
  50. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/_utils/_utils.py +0 -0
  51. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/.keep +0 -0
  52. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/__init__.py +0 -0
  53. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/exceptions.py +0 -0
  54. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/scope.py +0 -0
  55. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/trace.py +0 -0
  56. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/trace_exporter.py +0 -0
  57. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/types.py +0 -0
  58. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/lib/tracing/util.py +0 -0
  59. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/pagination.py +0 -0
  60. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/py.typed +0 -0
  61. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/__init__.py +0 -0
  62. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/chat/__init__.py +0 -0
  63. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/chat/chat.py +0 -0
  64. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/chat/completions.py +0 -0
  65. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/completions.py +0 -0
  66. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/dataset_items.py +0 -0
  67. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/datasets.py +0 -0
  68. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/evaluation_items.py +0 -0
  69. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/evaluations.py +0 -0
  70. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/files/__init__.py +0 -0
  71. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/files/content.py +0 -0
  72. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/files/files.py +0 -0
  73. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/inference.py +0 -0
  74. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/models.py +0 -0
  75. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/resources/spans.py +0 -0
  76. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/__init__.py +0 -0
  77. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/__init__.py +0 -0
  78. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/chat_completion.py +0 -0
  79. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/chat_completion_chunk.py +0 -0
  80. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/completion_create_params.py +0 -0
  81. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/completion_create_response.py +0 -0
  82. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/completion_models_params.py +0 -0
  83. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/completion_models_response.py +0 -0
  84. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/chat/model_definition.py +0 -0
  85. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/completion.py +0 -0
  86. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/completion_create_params.py +0 -0
  87. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/component.py +0 -0
  88. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/component_param.py +0 -0
  89. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/container.py +0 -0
  90. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/container_param.py +0 -0
  91. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset.py +0 -0
  92. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_create_params.py +0 -0
  93. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_delete_response.py +0 -0
  94. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_item.py +0 -0
  95. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_item_batch_create_params.py +0 -0
  96. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_item_batch_create_response.py +0 -0
  97. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_item_delete_response.py +0 -0
  98. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_item_list_params.py +0 -0
  99. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_item_retrieve_params.py +0 -0
  100. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_item_update_params.py +0 -0
  101. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_list_params.py +0 -0
  102. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_retrieve_params.py +0 -0
  103. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/dataset_update_params.py +0 -0
  104. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation.py +0 -0
  105. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_create_params.py +0 -0
  106. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_delete_response.py +0 -0
  107. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_item.py +0 -0
  108. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_item_list_params.py +0 -0
  109. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_item_retrieve_params.py +0 -0
  110. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_list_params.py +0 -0
  111. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_retrieve_params.py +0 -0
  112. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_task.py +0 -0
  113. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_task_param.py +0 -0
  114. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/evaluation_update_params.py +0 -0
  115. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/file.py +0 -0
  116. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/file_create_params.py +0 -0
  117. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/file_delete_response.py +0 -0
  118. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/file_list.py +0 -0
  119. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/file_list_params.py +0 -0
  120. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/file_update_params.py +0 -0
  121. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/files/__init__.py +0 -0
  122. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/inference_create_params.py +0 -0
  123. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/inference_create_response.py +0 -0
  124. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/inference_model.py +0 -0
  125. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/inference_model_list.py +0 -0
  126. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/inference_response.py +0 -0
  127. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/inference_response_chunk.py +0 -0
  128. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/item_locator.py +0 -0
  129. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/item_locator_template.py +0 -0
  130. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/model_create_params.py +0 -0
  131. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/model_delete_response.py +0 -0
  132. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/model_list_params.py +0 -0
  133. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/model_update_params.py +0 -0
  134. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span.py +0 -0
  135. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_batch_params.py +0 -0
  136. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_batch_response.py +0 -0
  137. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_create_params.py +0 -0
  138. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_search_params.py +0 -0
  139. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_search_response.py +0 -0
  140. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_update_params.py +0 -0
  141. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_upsert_batch_params.py +0 -0
  142. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/scale_gp_beta/types/span_upsert_batch_response.py +0 -0
  143. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/src/sgp_dev/lib/.keep +0 -0
  144. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/__init__.py +0 -0
  145. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/__init__.py +0 -0
  146. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/chat/__init__.py +0 -0
  147. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/chat/test_completions.py +0 -0
  148. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/files/__init__.py +0 -0
  149. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/files/test_content.py +0 -0
  150. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_completions.py +0 -0
  151. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_dataset_items.py +0 -0
  152. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_datasets.py +0 -0
  153. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_evaluation_items.py +0 -0
  154. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_evaluations.py +0 -0
  155. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_files.py +0 -0
  156. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_inference.py +0 -0
  157. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_models.py +0 -0
  158. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/api_resources/test_spans.py +0 -0
  159. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/conftest.py +0 -0
  160. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/lib/tracing/test_span.py +0 -0
  161. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/lib/tracing/test_trace.py +0 -0
  162. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/lib/tracing/test_trace_exporter.py +0 -0
  163. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/lib/tracing/test_tracing.py +0 -0
  164. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/sample_file.txt +0 -0
  165. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_client.py +0 -0
  166. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_deepcopy.py +0 -0
  167. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_extract_files.py +0 -0
  168. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_files.py +0 -0
  169. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_models.py +0 -0
  170. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_qs.py +0 -0
  171. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_required_args.py +0 -0
  172. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_response.py +0 -0
  173. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_streaming.py +0 -0
  174. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_transform.py +0 -0
  175. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_utils/test_proxy.py +0 -0
  176. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/test_utils/test_typing.py +0 -0
  177. {scale_gp_beta-0.1.0a23 → scale_gp_beta-0.1.0a24}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.1.0-alpha.24"
3
+ }
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.24 (2025-06-20)
4
+
5
+ Full Changelog: [v0.1.0-alpha.23...v0.1.0-alpha.24](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.23...v0.1.0-alpha.24)
6
+
7
+ ### Features
8
+
9
+ * Add queue_manger override for create span and trace & explicit option to disable daemon worker on TraceQueueManager. ([#117](https://github.com/scaleapi/sgp-python-beta/issues/117)) ([746ffa0](https://github.com/scaleapi/sgp-python-beta/commit/746ffa07ef7e31dfde972f443a440b0c7267b4fd))
10
+ * make span.py thread safe. ([#115](https://github.com/scaleapi/sgp-python-beta/issues/115)) ([55116b9](https://github.com/scaleapi/sgp-python-beta/commit/55116b9a296c64a9d94773a230a25c5ba22ca1ee))
11
+
3
12
  ## 0.1.0-alpha.23 (2025-06-20)
4
13
 
5
14
  Full Changelog: [v0.1.0-alpha.22...v0.1.0-alpha.23](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.22...v0.1.0-alpha.23)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: scale-gp-beta
3
- Version: 0.1.0a23
3
+ Version: 0.1.0a24
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "scale-gp-beta"
3
- version = "0.1.0-alpha.23"
3
+ version = "0.1.0-alpha.24"
4
4
  description = "The official Python library for the Scale GP API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -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.23" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.24" # x-release-please-version
@@ -1,7 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ from copy import deepcopy
4
5
  from typing import TYPE_CHECKING, Type, Optional
6
+ from threading import RLock
5
7
  from typing_extensions import override
6
8
 
7
9
  from scale_gp_beta.types.span_upsert_batch_params import Item as SpanCreateRequest
@@ -64,8 +66,8 @@ class BaseSpan:
64
66
  self._group_id = group_id
65
67
  self._span_id: str = span_id or generate_span_id()
66
68
  self._parent_span_id = parent_span_id
67
- self.start_time: Optional[str] = None
68
- self.end_time: Optional[str] = None
69
+ self._start_time: Optional[str] = None
70
+ self._end_time: Optional[str] = None
69
71
  self._input: SpanInputParam = input or {}
70
72
  self._output: SpanOutputParam = output or {}
71
73
  self._metadata: SpanMetadataParam = metadata or {}
@@ -74,6 +76,7 @@ class BaseSpan:
74
76
  self._queue_manager = queue_manager
75
77
 
76
78
  self._contextvar_token: Optional[contextvars.Token[Optional[BaseSpan]]] = None
79
+ self._lock = RLock()
77
80
 
78
81
  def start(self) -> None:
79
82
  pass
@@ -113,13 +116,33 @@ class BaseSpan:
113
116
  return self._span_type
114
117
 
115
118
  # with setters
119
+ @property
120
+ def start_time(self) -> Optional[str]:
121
+ return self._start_time
122
+
123
+ @start_time.setter
124
+ def start_time(self, value: Optional[str]) -> None:
125
+ with self._lock:
126
+ self._start_time = value
127
+
128
+ @property
129
+ def end_time(self) -> Optional[str]:
130
+ return self._end_time
131
+
132
+ @end_time.setter
133
+ def end_time(self, value: Optional[str]) -> None:
134
+ with self._lock:
135
+ self._end_time = value
136
+
116
137
  @property
117
138
  def metadata(self) -> SpanMetadataParam:
118
139
  return self._metadata
119
140
 
120
141
  @metadata.setter
121
142
  def metadata(self, value: SpanMetadataParam) -> None:
122
- self._metadata = value
143
+ # this does not protect against span.metadata["foo"] = "bar" which uses the getter, ditto input and output
144
+ with self._lock:
145
+ self._metadata = value
123
146
 
124
147
  @property
125
148
  def input(self) -> SpanInputParam:
@@ -127,7 +150,8 @@ class BaseSpan:
127
150
 
128
151
  @input.setter
129
152
  def input(self, value: SpanInputParam) -> None:
130
- self._input = value
153
+ with self._lock:
154
+ self._input = value
131
155
 
132
156
  @property
133
157
  def output(self) -> SpanOutputParam:
@@ -135,7 +159,8 @@ class BaseSpan:
135
159
 
136
160
  @output.setter
137
161
  def output(self, value: SpanOutputParam) -> None:
138
- self._output = value
162
+ with self._lock:
163
+ self._output = value
139
164
 
140
165
  def set_error(
141
166
  self,
@@ -144,12 +169,13 @@ class BaseSpan:
144
169
  exception: Optional[BaseException] = None,
145
170
  ) -> None:
146
171
  # Naively record details in metadata for now, note that error capture only supported in context manager
147
- exception_type = type(exception).__name__ if exception else None
148
- exception_message = str(exception) if exception else None
149
- self._status = "ERROR"
150
- self.metadata["error"] = True
151
- self.metadata["error_type"] = error_type or exception_type
152
- self.metadata["error_message"] = error_message or exception_message
172
+ with self._lock:
173
+ exception_type = type(exception).__name__ if exception else None
174
+ exception_message = str(exception) if exception else None
175
+ self._status = "ERROR"
176
+ self.metadata["error"] = True
177
+ self.metadata["error_type"] = error_type or exception_type
178
+ self.metadata["error_message"] = error_message or exception_message
153
179
 
154
180
  def __enter__(self) -> BaseSpan:
155
181
  self.start()
@@ -167,32 +193,35 @@ class BaseSpan:
167
193
  self.end()
168
194
 
169
195
  def to_request_params(self) -> SpanCreateRequest:
170
- if self.start_time is None:
171
- raise ParamsCreationError("No start time specified")
172
-
173
- request_data = SpanCreateRequest(
174
- name=self.name,
175
- id=self.span_id,
176
- trace_id=self.trace_id,
177
- start_timestamp=self.start_time,
178
- input=self.input,
179
- output=self.output,
180
- metadata=self.metadata,
181
- status=self.status,
182
- type=self.span_type
183
- )
196
+ with self._lock:
197
+ if self.start_time is None:
198
+ raise ParamsCreationError("No start time specified")
199
+
200
+ request_data = SpanCreateRequest(
201
+ name=self.name,
202
+ id=self.span_id,
203
+ trace_id=self.trace_id,
204
+ start_timestamp=self.start_time,
205
+ input=self.input,
206
+ output=self.output,
207
+ metadata=self.metadata,
208
+ status=self.status,
209
+ type=self.span_type
210
+ )
184
211
 
185
- if self.end_time is not None:
186
- request_data["end_timestamp"] = self.end_time
212
+ if self.end_time is not None:
213
+ request_data["end_timestamp"] = self.end_time
187
214
 
188
- # parent_span_id is optional (root spans)
189
- if self.parent_span_id is not None:
190
- request_data["parent_id"] = self.parent_span_id
215
+ # parent_span_id is optional (root spans)
216
+ if self.parent_span_id is not None:
217
+ request_data["parent_id"] = self.parent_span_id
191
218
 
192
- if self.group_id is not None:
193
- request_data["group_id"] = self.group_id
219
+ if self.group_id is not None:
220
+ request_data["group_id"] = self.group_id
194
221
 
195
- return request_data
222
+ # ensure no future changes to metadata, input or output changes request_data, full isolation
223
+ request_data = deepcopy(request_data)
224
+ return request_data
196
225
 
197
226
  @override
198
227
  def __repr__(self) -> str:
@@ -288,13 +317,14 @@ class Span(BaseSpan):
288
317
  Sets the `start_time`, reports the span start to the `TraceQueueManager`
289
318
  , and registers this span as the current span.
290
319
  """
291
- if self.start_time is not None:
292
- log.warning(f"Span {self.name}: {self.span_id} has already started at {self.start_time}")
293
- return
320
+ with self._lock:
321
+ if self.start_time is not None:
322
+ log.warning(f"Span {self.name}: {self.span_id} has already started at {self.start_time}")
323
+ return
294
324
 
295
- self.start_time = iso_timestamp()
296
- self._queue_manager.report_span_start(self)
297
- self._contextvar_token = Scope.set_current_span(self)
325
+ self.start_time = iso_timestamp()
326
+ self._queue_manager.report_span_start(self)
327
+ self._contextvar_token = Scope.set_current_span(self)
298
328
 
299
329
  @override
300
330
  def end(self) -> None:
@@ -304,19 +334,20 @@ class Span(BaseSpan):
304
334
  `TraceQueueManager` for queuing and export, and resets this span from the
305
335
  `Scope`.
306
336
  """
307
- if self.end_time is not None:
308
- log.warning(f"Span {self.name}: {self.span_id} has already ended at {self.end_time}")
309
- return
310
- if self._contextvar_token is None:
311
- log.warning(
312
- (
313
- f"Span {self.name}: {self.span_id} attempting to end without a valid context token. "
314
- "Was start() called and completed successfully?"
337
+ with self._lock:
338
+ if self.end_time is not None:
339
+ log.warning(f"Span {self.name}: {self.span_id} has already ended at {self.end_time}")
340
+ return
341
+ if self._contextvar_token is None:
342
+ log.warning(
343
+ (
344
+ f"Span {self.name}: {self.span_id} attempting to end without a valid context token. "
345
+ "Was start() called and completed successfully?"
346
+ )
315
347
  )
316
- )
317
- return
348
+ return
318
349
 
319
- self.end_time = iso_timestamp()
320
- self._queue_manager.report_span_end(self)
321
- Scope.reset_current_span(self._contextvar_token)
322
- self._contextvar_token = None
350
+ self.end_time = iso_timestamp()
351
+ self._queue_manager.report_span_end(self)
352
+ Scope.reset_current_span(self._contextvar_token)
353
+ self._contextvar_token = None
@@ -30,7 +30,7 @@ class TraceQueueManager:
30
30
  """Manage trace and spans queue
31
31
  Store spans in-memory until the threshold has been reached then flush to server.
32
32
 
33
- Optionally provide a client, if unprovided we will attempt to create a default client.
33
+ Optionally provide a client, if unprovided, we will attempt to create a default client.
34
34
  """
35
35
 
36
36
  def __init__(
@@ -41,6 +41,7 @@ class TraceQueueManager:
41
41
  trigger_queue_size: int = DEFAULT_TRIGGER_QUEUE_SIZE,
42
42
  trigger_cadence: float = DEFAULT_TRIGGER_CADENCE,
43
43
  retries: int = DEFAULT_RETRIES,
44
+ worker_enabled: Optional[bool] = None,
44
45
  ):
45
46
  self._client = client
46
47
  self._attempted_local_client_creation = False
@@ -54,7 +55,9 @@ class TraceQueueManager:
54
55
  self._shutdown_event = threading.Event()
55
56
  self._queue: queue.Queue[Span] = queue.Queue(maxsize=max_queue_size)
56
57
 
57
- if not is_disabled():
58
+ self._worker_enabled = worker_enabled if worker_enabled is not None else not is_disabled()
59
+
60
+ if self._worker_enabled:
58
61
  self._worker = threading.Thread(daemon=True, target=self._run)
59
62
  self._worker.start()
60
63
 
@@ -66,7 +69,7 @@ class TraceQueueManager:
66
69
  self._client = client
67
70
 
68
71
  def shutdown(self, timeout: Optional[float] = None) -> None:
69
- if is_disabled():
72
+ if not self._worker_enabled:
70
73
  log.debug("No worker to shutdown")
71
74
  return
72
75
  log.info(f"Shutting down trace queue manager, joining worker thread with timeout {timeout}")
@@ -92,6 +95,7 @@ class TraceQueueManager:
92
95
 
93
96
  def enqueue(self, span: "Span") -> None:
94
97
  try:
98
+ # Should this be a deep copy of span instead? Currently is a reference
95
99
  self._queue.put_nowait(span)
96
100
  except queue.Full:
97
101
  log.warning(f"Queue full, ignoring span {span.span_id}")
@@ -6,7 +6,7 @@ from .util import is_disabled
6
6
  from .scope import Scope
7
7
  from .trace import Trace, BaseTrace, NoOpTrace
8
8
  from .types import SpanInputParam, SpanOutputParam, SpanTypeLiterals, SpanMetadataParam
9
- from .trace_queue_manager import tracing_queue_manager
9
+ from .trace_queue_manager import TraceQueueManager, tracing_queue_manager
10
10
 
11
11
  log: logging.Logger = logging.getLogger(__name__)
12
12
 
@@ -58,6 +58,7 @@ def create_trace(
58
58
  span_id: Optional[str] = None,
59
59
  trace_id: Optional[str] = None,
60
60
  group_id: Optional[str] = None,
61
+ queue_manager: Optional[TraceQueueManager] = None,
61
62
  ) -> BaseTrace:
62
63
  """Creates a new trace and root span instance.
63
64
 
@@ -83,6 +84,8 @@ def create_trace(
83
84
  If None, a unique trace ID will be generated.
84
85
  Max length is 38 characters.
85
86
  group_id (Optional[str]): An optional, id to group traces.
87
+ queue_manager (Optional[TraceQueueManager], optional): An optional `TraceQueueManager`.
88
+ Useful for when you need explicit control of flushing and client behavior.
86
89
 
87
90
  Returns:
88
91
  BaseTrace: A `Trace` instance if tracing is enabled, or a `NoOpTrace`
@@ -109,7 +112,7 @@ def create_trace(
109
112
  if active_trace is not None:
110
113
  log.warning(f"Trace with id {active_trace.trace_id} is already active. Creating a new trace anyways.")
111
114
 
112
- queue_manager = tracing_queue_manager()
115
+ queue_manager = queue_manager or tracing_queue_manager()
113
116
  trace = Trace(
114
117
  name=name,
115
118
  trace_id=trace_id,
@@ -136,6 +139,7 @@ def create_span(
136
139
  parent_id: Optional[str] = None,
137
140
  trace_id: Optional[str] = None,
138
141
  group_id: Optional[str] = None,
142
+ queue_manager: Optional[TraceQueueManager] = None,
139
143
  ) -> BaseSpan:
140
144
  """Creates a new span instance.
141
145
 
@@ -171,6 +175,8 @@ def create_span(
171
175
  trace_id (Optional[str], optional): A `Trace` id. Used for explicit control.
172
176
  Default to trace id fetched from the active scope.
173
177
  group_id (Optional[str]): An optional, id to group traces.
178
+ queue_manager (Optional[TraceQueueManager], optional): An optional `TraceQueueManager`.
179
+ Useful for when you need explicit control of flushing and client behavior.
174
180
 
175
181
  Returns:
176
182
  BaseSpan: A `Span` instance if tracing is enabled and a valid trace context
@@ -213,7 +219,7 @@ def create_span(
213
219
  log.debug(f"Attempting to create a span with no trace")
214
220
  return noop_span
215
221
 
216
- queue_manager = tracing_queue_manager()
222
+ queue_manager = queue_manager or tracing_queue_manager()
217
223
  span = Span(
218
224
  name=name,
219
225
  span_id=span_id,
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.1.0-alpha.23"
3
- }