scale-gp-beta 0.1.0a40__tar.gz → 0.1.0a42__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 (228) hide show
  1. scale_gp_beta-0.1.0a42/.release-please-manifest.json +3 -0
  2. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/CHANGELOG.md +35 -0
  3. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/LICENSE +1 -1
  4. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/PKG-INFO +50 -3
  5. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/README.md +49 -2
  6. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/api.md +22 -0
  7. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/pyproject.toml +1 -1
  8. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_base_client.py +134 -11
  9. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_client.py +42 -0
  10. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_models.py +16 -1
  11. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_streaming.py +4 -2
  12. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_types.py +9 -0
  13. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_version.py +1 -1
  14. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/__init__.py +14 -0
  15. scale_gp_beta-0.1.0a42/src/scale_gp_beta/resources/build.py +588 -0
  16. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/__init__.py +7 -0
  17. scale_gp_beta-0.1.0a42/src/scale_gp_beta/types/build_cancel_response.py +38 -0
  18. scale_gp_beta-0.1.0a42/src/scale_gp_beta/types/build_create_params.py +26 -0
  19. scale_gp_beta-0.1.0a42/src/scale_gp_beta/types/build_create_response.py +38 -0
  20. scale_gp_beta-0.1.0a42/src/scale_gp_beta/types/build_list_params.py +19 -0
  21. scale_gp_beta-0.1.0a42/src/scale_gp_beta/types/build_list_response.py +38 -0
  22. scale_gp_beta-0.1.0a42/src/scale_gp_beta/types/build_retrieve_response.py +38 -0
  23. scale_gp_beta-0.1.0a42/src/scale_gp_beta/types/stream_chunk.py +12 -0
  24. scale_gp_beta-0.1.0a42/tests/api_resources/test_build.py +416 -0
  25. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_client.py +210 -2
  26. scale_gp_beta-0.1.0a40/.release-please-manifest.json +0 -3
  27. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/.gitignore +0 -0
  28. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/CONTRIBUTING.md +0 -0
  29. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/SECURITY.md +0 -0
  30. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/bin/check-release-environment +0 -0
  31. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/bin/publish-pypi +0 -0
  32. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/examples/.keep +0 -0
  33. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/examples/tracing/0_primitives_fibonacci.py +0 -0
  34. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/examples/tracing/1_explicit_use_case.py +0 -0
  35. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/examples/tracing/2_direct_upload.py +0 -0
  36. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/examples/tracing/3_openai_agent_tracing.py +0 -0
  37. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/noxfile.py +0 -0
  38. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/release-please-config.json +0 -0
  39. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/requirements-dev.lock +0 -0
  40. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/requirements.lock +0 -0
  41. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp/lib/.keep +0 -0
  42. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/__init__.py +0 -0
  43. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_compat.py +0 -0
  44. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_constants.py +0 -0
  45. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_exceptions.py +0 -0
  46. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_files.py +0 -0
  47. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_qs.py +0 -0
  48. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_resource.py +0 -0
  49. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_response.py +0 -0
  50. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/__init__.py +0 -0
  51. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_compat.py +0 -0
  52. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_datetime_parse.py +0 -0
  53. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_logs.py +0 -0
  54. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_proxy.py +0 -0
  55. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_reflection.py +0 -0
  56. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_resources_proxy.py +0 -0
  57. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_streams.py +0 -0
  58. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_sync.py +0 -0
  59. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_transform.py +0 -0
  60. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_typing.py +0 -0
  61. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/_utils/_utils.py +0 -0
  62. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/.keep +0 -0
  63. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/CONTRIBUTING.MD +0 -0
  64. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/__init__.py +0 -0
  65. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/exceptions.py +0 -0
  66. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/integrations/__init__.py +0 -0
  67. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/integrations/openai/__init__.py +0 -0
  68. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/integrations/openai/openai_span_type_map.py +0 -0
  69. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/integrations/openai/openai_tracing_sgp_processor.py +0 -0
  70. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/integrations/openai/utils.py +0 -0
  71. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/scope.py +0 -0
  72. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/span.py +0 -0
  73. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/trace.py +0 -0
  74. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/trace_exporter.py +0 -0
  75. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/trace_queue_manager.py +0 -0
  76. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/tracing.py +0 -0
  77. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/types.py +0 -0
  78. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/lib/tracing/util.py +0 -0
  79. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/pagination.py +0 -0
  80. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/py.typed +0 -0
  81. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/chat/__init__.py +0 -0
  82. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/chat/chat.py +0 -0
  83. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/chat/completions.py +0 -0
  84. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/completions.py +0 -0
  85. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/credentials.py +0 -0
  86. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/dataset_items.py +0 -0
  87. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/datasets.py +0 -0
  88. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/evaluation_items.py +0 -0
  89. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/evaluations.py +0 -0
  90. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/files/__init__.py +0 -0
  91. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/files/content.py +0 -0
  92. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/files/files.py +0 -0
  93. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/inference.py +0 -0
  94. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/models.py +0 -0
  95. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/questions.py +0 -0
  96. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/responses.py +0 -0
  97. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/span_assessments.py +0 -0
  98. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/resources/spans.py +0 -0
  99. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/approval_status.py +0 -0
  100. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/assessment_type.py +0 -0
  101. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/__init__.py +0 -0
  102. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/chat_completion.py +0 -0
  103. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/chat_completion_chunk.py +0 -0
  104. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/completion_create_params.py +0 -0
  105. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/completion_create_response.py +0 -0
  106. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/completion_models_params.py +0 -0
  107. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/completion_models_response.py +0 -0
  108. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/chat/model_definition.py +0 -0
  109. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/completion.py +0 -0
  110. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/completion_create_params.py +0 -0
  111. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/component.py +0 -0
  112. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/component_param.py +0 -0
  113. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/container.py +0 -0
  114. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/container_param.py +0 -0
  115. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/credential.py +0 -0
  116. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/credential_create_params.py +0 -0
  117. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/credential_delete_response.py +0 -0
  118. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/credential_list_params.py +0 -0
  119. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/credential_secret.py +0 -0
  120. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/credential_update_params.py +0 -0
  121. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset.py +0 -0
  122. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_create_params.py +0 -0
  123. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_delete_response.py +0 -0
  124. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_item.py +0 -0
  125. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_item_batch_create_params.py +0 -0
  126. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_item_batch_create_response.py +0 -0
  127. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_item_delete_response.py +0 -0
  128. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_item_list_params.py +0 -0
  129. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_item_retrieve_params.py +0 -0
  130. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_item_update_params.py +0 -0
  131. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_list_params.py +0 -0
  132. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_retrieve_params.py +0 -0
  133. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/dataset_update_params.py +0 -0
  134. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation.py +0 -0
  135. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_create_params.py +0 -0
  136. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_item.py +0 -0
  137. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_item_list_params.py +0 -0
  138. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_item_retrieve_params.py +0 -0
  139. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_list_params.py +0 -0
  140. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_retrieve_params.py +0 -0
  141. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_task.py +0 -0
  142. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_task_param.py +0 -0
  143. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/evaluation_update_params.py +0 -0
  144. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/file.py +0 -0
  145. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/file_create_params.py +0 -0
  146. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/file_delete_response.py +0 -0
  147. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/file_import_from_cloud_params.py +0 -0
  148. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/file_import_from_cloud_response.py +0 -0
  149. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/file_list_params.py +0 -0
  150. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/file_update_params.py +0 -0
  151. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/files/__init__.py +0 -0
  152. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/inference_create_params.py +0 -0
  153. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/inference_create_response.py +0 -0
  154. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/inference_model.py +0 -0
  155. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/inference_response.py +0 -0
  156. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/inference_response_chunk.py +0 -0
  157. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/item_locator.py +0 -0
  158. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/item_locator_template.py +0 -0
  159. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/model_create_params.py +0 -0
  160. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/model_delete_response.py +0 -0
  161. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/model_list_params.py +0 -0
  162. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/model_update_params.py +0 -0
  163. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/question.py +0 -0
  164. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/question_create_params.py +0 -0
  165. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/question_list_params.py +0 -0
  166. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/response.py +0 -0
  167. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/response_create_params.py +0 -0
  168. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/response_create_response.py +0 -0
  169. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/shared/__init__.py +0 -0
  170. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/shared/identity.py +0 -0
  171. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span.py +0 -0
  172. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_assessment.py +0 -0
  173. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_assessment_create_params.py +0 -0
  174. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_assessment_delete_response.py +0 -0
  175. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_assessment_list_params.py +0 -0
  176. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_assessment_update_params.py +0 -0
  177. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_batch_params.py +0 -0
  178. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_batch_response.py +0 -0
  179. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_create_params.py +0 -0
  180. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_search_params.py +0 -0
  181. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_status.py +0 -0
  182. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_type.py +0 -0
  183. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_update_params.py +0 -0
  184. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_upsert_batch_params.py +0 -0
  185. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/scale_gp_beta/types/span_upsert_batch_response.py +0 -0
  186. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/src/sgp_dev/lib/.keep +0 -0
  187. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/__init__.py +0 -0
  188. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/__init__.py +0 -0
  189. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/chat/__init__.py +0 -0
  190. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/chat/test_completions.py +0 -0
  191. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/files/__init__.py +0 -0
  192. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/files/test_content.py +0 -0
  193. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_completions.py +0 -0
  194. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_credentials.py +0 -0
  195. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_dataset_items.py +0 -0
  196. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_datasets.py +0 -0
  197. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_evaluation_items.py +0 -0
  198. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_evaluations.py +0 -0
  199. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_files.py +0 -0
  200. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_inference.py +0 -0
  201. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_models.py +0 -0
  202. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_questions.py +0 -0
  203. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_responses.py +0 -0
  204. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_span_assessments.py +0 -0
  205. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/api_resources/test_spans.py +0 -0
  206. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/conftest.py +0 -0
  207. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/integrations/__init__.py +0 -0
  208. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/integrations/openai/__init__.py +0 -0
  209. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/integrations/openai/test_utils.py +0 -0
  210. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/test_span.py +0 -0
  211. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/test_trace.py +0 -0
  212. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/test_trace_exporter.py +0 -0
  213. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/test_trace_queue_manager.py +0 -0
  214. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/lib/tracing/test_tracing.py +0 -0
  215. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/sample_file.txt +0 -0
  216. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_deepcopy.py +0 -0
  217. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_extract_files.py +0 -0
  218. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_files.py +0 -0
  219. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_models.py +0 -0
  220. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_qs.py +0 -0
  221. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_required_args.py +0 -0
  222. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_response.py +0 -0
  223. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_streaming.py +0 -0
  224. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_transform.py +0 -0
  225. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_utils/test_datetime_parse.py +0 -0
  226. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_utils/test_proxy.py +0 -0
  227. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/test_utils/test_typing.py +0 -0
  228. {scale_gp_beta-0.1.0a40 → scale_gp_beta-0.1.0a42}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.1.0-alpha.42"
3
+ }
@@ -1,5 +1,40 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.42 (2026-01-26)
4
+
5
+ Full Changelog: [v0.1.0-alpha.41...v0.1.0-alpha.42](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.41...v0.1.0-alpha.42)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([1b421b2](https://github.com/scaleapi/sgp-python-beta/commit/1b421b2381966d00c5926e8edfca9bfcba828e52))
10
+ * **api:** manual updates ([1ebe3a3](https://github.com/scaleapi/sgp-python-beta/commit/1ebe3a390ebaa5062fa896d012e9ee2fba297b5a))
11
+
12
+
13
+ ### Chores
14
+
15
+ * **ci:** upgrade `actions/github-script` ([30143ce](https://github.com/scaleapi/sgp-python-beta/commit/30143ce61bcf4ae60f669aa45a77d008eabbce9b))
16
+
17
+ ## 0.1.0-alpha.41 (2026-01-22)
18
+
19
+ Full Changelog: [v0.1.0-alpha.40...v0.1.0-alpha.41](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.40...v0.1.0-alpha.41)
20
+
21
+ ### Features
22
+
23
+ * **api:** manual updates ([9b156ee](https://github.com/scaleapi/sgp-python-beta/commit/9b156eed3f4d4ebaa6faa8fb23ef0b1781760415))
24
+ * **client:** add support for binary request streaming ([04962bf](https://github.com/scaleapi/sgp-python-beta/commit/04962bf6406930a75e123d2af5dde86d0f313256))
25
+
26
+
27
+ ### Chores
28
+
29
+ * **internal:** codegen related update ([4c33009](https://github.com/scaleapi/sgp-python-beta/commit/4c330099f4f093af414196c4e62f33cc98c7b819))
30
+ * **internal:** codegen related update ([5db2581](https://github.com/scaleapi/sgp-python-beta/commit/5db25817cb90f868cd98bed7e53c0492ac47a9ae))
31
+ * **internal:** update `actions/checkout` version ([df2bf4c](https://github.com/scaleapi/sgp-python-beta/commit/df2bf4c22cc5f517a5794646ae6f9be2cd929f31))
32
+
33
+
34
+ ### Documentation
35
+
36
+ * prominently feature MCP server setup in root SDK readmes ([a683797](https://github.com/scaleapi/sgp-python-beta/commit/a683797c2730376322771da46e19d782fa2c3b1a))
37
+
3
38
  ## 0.1.0-alpha.40 (2025-12-19)
4
39
 
5
40
  Full Changelog: [v0.1.0-alpha.39...v0.1.0-alpha.40](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.39...v0.1.0-alpha.40)
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2025 Scale GP
189
+ Copyright 2026 Scale GP
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: scale-gp-beta
3
- Version: 0.1.0a40
3
+ Version: 0.1.0a42
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
@@ -44,6 +44,15 @@ and offers both synchronous and asynchronous clients powered by [httpx](https://
44
44
 
45
45
  It is generated with [Stainless](https://www.stainless.com/).
46
46
 
47
+ ## MCP Server
48
+
49
+ Use the Scale GP MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.
50
+
51
+ [![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=scale-gp-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInNjYWxlLWdwLW1jcCJdfQ)
52
+ [![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22scale-gp-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22scale-gp-mcp%22%5D%7D)
53
+
54
+ > Note: You may need to set environment variables in your MCP client.
55
+
47
56
  ## Documentation
48
57
 
49
58
  The REST API documentation can be found on [docs.gp.scale.com](https://docs.gp.scale.com). The full API of this library can be found in [api.md](https://github.com/scaleapi/sgp-python-beta/tree/main/api.md).
@@ -52,7 +61,7 @@ The REST API documentation can be found on [docs.gp.scale.com](https://docs.gp.s
52
61
 
53
62
  ```sh
54
63
  # install from PyPI
55
- pip install --pre scale-gp-beta
64
+ pip install '--pre scale-gp-beta'
56
65
  ```
57
66
 
58
67
  ## Usage
@@ -358,7 +367,7 @@ You can enable this by installing `aiohttp`:
358
367
 
359
368
  ```sh
360
369
  # install from PyPI
361
- pip install --pre scale-gp-beta[aiohttp]
370
+ pip install '--pre scale-gp-beta[aiohttp]'
362
371
  ```
363
372
 
364
373
  Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
@@ -386,6 +395,44 @@ async def main() -> None:
386
395
  asyncio.run(main())
387
396
  ```
388
397
 
398
+ ## Streaming responses
399
+
400
+ We provide support for streaming responses using Server Side Events (SSE).
401
+
402
+ ```python
403
+ from scale_gp_beta import SGPClient
404
+
405
+ client = SGPClient(
406
+ account_id="My Account ID",
407
+ )
408
+
409
+ stream = client.chat.completions.create(
410
+ messages=[{"foo": "bar"}],
411
+ model="model",
412
+ stream=True,
413
+ )
414
+ for completion in stream:
415
+ print(completion)
416
+ ```
417
+
418
+ The async client uses the exact same interface.
419
+
420
+ ```python
421
+ from scale_gp_beta import AsyncSGPClient
422
+
423
+ client = AsyncSGPClient(
424
+ account_id="My Account ID",
425
+ )
426
+
427
+ stream = await client.chat.completions.create(
428
+ messages=[{"foo": "bar"}],
429
+ model="model",
430
+ stream=True,
431
+ )
432
+ async for completion in stream:
433
+ print(completion)
434
+ ```
435
+
389
436
  ## Using types
390
437
 
391
438
  Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:
@@ -9,6 +9,15 @@ and offers both synchronous and asynchronous clients powered by [httpx](https://
9
9
 
10
10
  It is generated with [Stainless](https://www.stainless.com/).
11
11
 
12
+ ## MCP Server
13
+
14
+ Use the Scale GP MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.
15
+
16
+ [![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=scale-gp-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInNjYWxlLWdwLW1jcCJdfQ)
17
+ [![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22scale-gp-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22scale-gp-mcp%22%5D%7D)
18
+
19
+ > Note: You may need to set environment variables in your MCP client.
20
+
12
21
  ## Documentation
13
22
 
14
23
  The REST API documentation can be found on [docs.gp.scale.com](https://docs.gp.scale.com). The full API of this library can be found in [api.md](api.md).
@@ -17,7 +26,7 @@ The REST API documentation can be found on [docs.gp.scale.com](https://docs.gp.s
17
26
 
18
27
  ```sh
19
28
  # install from PyPI
20
- pip install --pre scale-gp-beta
29
+ pip install '--pre scale-gp-beta'
21
30
  ```
22
31
 
23
32
  ## Usage
@@ -323,7 +332,7 @@ You can enable this by installing `aiohttp`:
323
332
 
324
333
  ```sh
325
334
  # install from PyPI
326
- pip install --pre scale-gp-beta[aiohttp]
335
+ pip install '--pre scale-gp-beta[aiohttp]'
327
336
  ```
328
337
 
329
338
  Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
@@ -351,6 +360,44 @@ async def main() -> None:
351
360
  asyncio.run(main())
352
361
  ```
353
362
 
363
+ ## Streaming responses
364
+
365
+ We provide support for streaming responses using Server Side Events (SSE).
366
+
367
+ ```python
368
+ from scale_gp_beta import SGPClient
369
+
370
+ client = SGPClient(
371
+ account_id="My Account ID",
372
+ )
373
+
374
+ stream = client.chat.completions.create(
375
+ messages=[{"foo": "bar"}],
376
+ model="model",
377
+ stream=True,
378
+ )
379
+ for completion in stream:
380
+ print(completion)
381
+ ```
382
+
383
+ The async client uses the exact same interface.
384
+
385
+ ```python
386
+ from scale_gp_beta import AsyncSGPClient
387
+
388
+ client = AsyncSGPClient(
389
+ account_id="My Account ID",
390
+ )
391
+
392
+ stream = await client.chat.completions.create(
393
+ messages=[{"foo": "bar"}],
394
+ model="model",
395
+ stream=True,
396
+ )
397
+ async for completion in stream:
398
+ print(completion)
399
+ ```
400
+
354
401
  ## Using types
355
402
 
356
403
  Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:
@@ -241,3 +241,25 @@ Methods:
241
241
  - <code title="post /v5/credentials/{credential_id}/secret">client.credentials.<a href="./src/scale_gp_beta/resources/credentials.py">decrypt</a>(credential_id) -> <a href="./src/scale_gp_beta/types/credential_secret.py">CredentialSecret</a></code>
242
242
  - <code title="post /v5/credentials/name/{credential_name}/secret">client.credentials.<a href="./src/scale_gp_beta/resources/credentials.py">decrypt_by_name</a>(credential_name) -> <a href="./src/scale_gp_beta/types/credential_secret.py">CredentialSecret</a></code>
243
243
  - <code title="get /v5/credentials/name/{credential_name}">client.credentials.<a href="./src/scale_gp_beta/resources/credentials.py">retrieve_by_name</a>(credential_name) -> <a href="./src/scale_gp_beta/types/credential.py">Credential</a></code>
244
+
245
+ # Build
246
+
247
+ Types:
248
+
249
+ ```python
250
+ from scale_gp_beta.types import (
251
+ StreamChunk,
252
+ BuildCreateResponse,
253
+ BuildRetrieveResponse,
254
+ BuildListResponse,
255
+ BuildCancelResponse,
256
+ )
257
+ ```
258
+
259
+ Methods:
260
+
261
+ - <code title="post /v5/builds">client.build.<a href="./src/scale_gp_beta/resources/build.py">create</a>(\*\*<a href="src/scale_gp_beta/types/build_create_params.py">params</a>) -> <a href="./src/scale_gp_beta/types/build_create_response.py">BuildCreateResponse</a></code>
262
+ - <code title="get /v5/builds/{build_id}">client.build.<a href="./src/scale_gp_beta/resources/build.py">retrieve</a>(build_id) -> <a href="./src/scale_gp_beta/types/build_retrieve_response.py">BuildRetrieveResponse</a></code>
263
+ - <code title="get /v5/builds">client.build.<a href="./src/scale_gp_beta/resources/build.py">list</a>(\*\*<a href="src/scale_gp_beta/types/build_list_params.py">params</a>) -> <a href="./src/scale_gp_beta/types/build_list_response.py">SyncCursorPage[BuildListResponse]</a></code>
264
+ - <code title="post /v5/builds/{build_id}/cancel">client.build.<a href="./src/scale_gp_beta/resources/build.py">cancel</a>(build_id) -> <a href="./src/scale_gp_beta/types/build_cancel_response.py">BuildCancelResponse</a></code>
265
+ - <code title="get /v5/builds/{build_id}/logs">client.build.<a href="./src/scale_gp_beta/resources/build.py">logs</a>(build_id) -> <a href="./src/scale_gp_beta/types/stream_chunk.py">StreamChunk</a></code>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "scale-gp-beta"
3
- version = "0.1.0-alpha.40"
3
+ version = "0.1.0-alpha.42"
4
4
  description = "The official Python library for the Scale GP API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -9,6 +9,7 @@ import asyncio
9
9
  import inspect
10
10
  import logging
11
11
  import platform
12
+ import warnings
12
13
  import email.utils
13
14
  from types import TracebackType
14
15
  from random import random
@@ -51,9 +52,11 @@ from ._types import (
51
52
  ResponseT,
52
53
  AnyMapping,
53
54
  PostParser,
55
+ BinaryTypes,
54
56
  RequestFiles,
55
57
  HttpxSendArgs,
56
58
  RequestOptions,
59
+ AsyncBinaryTypes,
57
60
  HttpxRequestFiles,
58
61
  ModelBuilderProtocol,
59
62
  not_given,
@@ -477,8 +480,19 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
477
480
  retries_taken: int = 0,
478
481
  ) -> httpx.Request:
479
482
  if log.isEnabledFor(logging.DEBUG):
480
- log.debug("Request options: %s", model_dump(options, exclude_unset=True))
481
-
483
+ log.debug(
484
+ "Request options: %s",
485
+ model_dump(
486
+ options,
487
+ exclude_unset=True,
488
+ # Pydantic v1 can't dump every type we support in content, so we exclude it for now.
489
+ exclude={
490
+ "content",
491
+ }
492
+ if PYDANTIC_V1
493
+ else {},
494
+ ),
495
+ )
482
496
  kwargs: dict[str, Any] = {}
483
497
 
484
498
  json_data = options.json_data
@@ -532,7 +546,13 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
532
546
  is_body_allowed = options.method.lower() != "get"
533
547
 
534
548
  if is_body_allowed:
535
- if isinstance(json_data, bytes):
549
+ if options.content is not None and json_data is not None:
550
+ raise TypeError("Passing both `content` and `json_data` is not supported")
551
+ if options.content is not None and files is not None:
552
+ raise TypeError("Passing both `content` and `files` is not supported")
553
+ if options.content is not None:
554
+ kwargs["content"] = options.content
555
+ elif isinstance(json_data, bytes):
536
556
  kwargs["content"] = json_data
537
557
  else:
538
558
  kwargs["json"] = json_data if is_given(json_data) else None
@@ -1194,6 +1214,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1194
1214
  *,
1195
1215
  cast_to: Type[ResponseT],
1196
1216
  body: Body | None = None,
1217
+ content: BinaryTypes | None = None,
1197
1218
  options: RequestOptions = {},
1198
1219
  files: RequestFiles | None = None,
1199
1220
  stream: Literal[False] = False,
@@ -1206,6 +1227,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1206
1227
  *,
1207
1228
  cast_to: Type[ResponseT],
1208
1229
  body: Body | None = None,
1230
+ content: BinaryTypes | None = None,
1209
1231
  options: RequestOptions = {},
1210
1232
  files: RequestFiles | None = None,
1211
1233
  stream: Literal[True],
@@ -1219,6 +1241,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1219
1241
  *,
1220
1242
  cast_to: Type[ResponseT],
1221
1243
  body: Body | None = None,
1244
+ content: BinaryTypes | None = None,
1222
1245
  options: RequestOptions = {},
1223
1246
  files: RequestFiles | None = None,
1224
1247
  stream: bool,
@@ -1231,13 +1254,25 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1231
1254
  *,
1232
1255
  cast_to: Type[ResponseT],
1233
1256
  body: Body | None = None,
1257
+ content: BinaryTypes | None = None,
1234
1258
  options: RequestOptions = {},
1235
1259
  files: RequestFiles | None = None,
1236
1260
  stream: bool = False,
1237
1261
  stream_cls: type[_StreamT] | None = None,
1238
1262
  ) -> ResponseT | _StreamT:
1263
+ if body is not None and content is not None:
1264
+ raise TypeError("Passing both `body` and `content` is not supported")
1265
+ if files is not None and content is not None:
1266
+ raise TypeError("Passing both `files` and `content` is not supported")
1267
+ if isinstance(body, bytes):
1268
+ warnings.warn(
1269
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1270
+ "Please pass raw bytes via the `content` parameter instead.",
1271
+ DeprecationWarning,
1272
+ stacklevel=2,
1273
+ )
1239
1274
  opts = FinalRequestOptions.construct(
1240
- method="post", url=path, json_data=body, files=to_httpx_files(files), **options
1275
+ method="post", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1241
1276
  )
1242
1277
  return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
1243
1278
 
@@ -1247,11 +1282,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1247
1282
  *,
1248
1283
  cast_to: Type[ResponseT],
1249
1284
  body: Body | None = None,
1285
+ content: BinaryTypes | None = None,
1250
1286
  files: RequestFiles | None = None,
1251
1287
  options: RequestOptions = {},
1252
1288
  ) -> ResponseT:
1289
+ if body is not None and content is not None:
1290
+ raise TypeError("Passing both `body` and `content` is not supported")
1291
+ if files is not None and content is not None:
1292
+ raise TypeError("Passing both `files` and `content` is not supported")
1293
+ if isinstance(body, bytes):
1294
+ warnings.warn(
1295
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1296
+ "Please pass raw bytes via the `content` parameter instead.",
1297
+ DeprecationWarning,
1298
+ stacklevel=2,
1299
+ )
1253
1300
  opts = FinalRequestOptions.construct(
1254
- method="patch", url=path, json_data=body, files=to_httpx_files(files), **options
1301
+ method="patch", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1255
1302
  )
1256
1303
  return self.request(cast_to, opts)
1257
1304
 
@@ -1261,11 +1308,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1261
1308
  *,
1262
1309
  cast_to: Type[ResponseT],
1263
1310
  body: Body | None = None,
1311
+ content: BinaryTypes | None = None,
1264
1312
  files: RequestFiles | None = None,
1265
1313
  options: RequestOptions = {},
1266
1314
  ) -> ResponseT:
1315
+ if body is not None and content is not None:
1316
+ raise TypeError("Passing both `body` and `content` is not supported")
1317
+ if files is not None and content is not None:
1318
+ raise TypeError("Passing both `files` and `content` is not supported")
1319
+ if isinstance(body, bytes):
1320
+ warnings.warn(
1321
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1322
+ "Please pass raw bytes via the `content` parameter instead.",
1323
+ DeprecationWarning,
1324
+ stacklevel=2,
1325
+ )
1267
1326
  opts = FinalRequestOptions.construct(
1268
- method="put", url=path, json_data=body, files=to_httpx_files(files), **options
1327
+ method="put", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1269
1328
  )
1270
1329
  return self.request(cast_to, opts)
1271
1330
 
@@ -1275,9 +1334,19 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1275
1334
  *,
1276
1335
  cast_to: Type[ResponseT],
1277
1336
  body: Body | None = None,
1337
+ content: BinaryTypes | None = None,
1278
1338
  options: RequestOptions = {},
1279
1339
  ) -> ResponseT:
1280
- opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options)
1340
+ if body is not None and content is not None:
1341
+ raise TypeError("Passing both `body` and `content` is not supported")
1342
+ if isinstance(body, bytes):
1343
+ warnings.warn(
1344
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1345
+ "Please pass raw bytes via the `content` parameter instead.",
1346
+ DeprecationWarning,
1347
+ stacklevel=2,
1348
+ )
1349
+ opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, content=content, **options)
1281
1350
  return self.request(cast_to, opts)
1282
1351
 
1283
1352
  def get_api_list(
@@ -1717,6 +1786,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1717
1786
  *,
1718
1787
  cast_to: Type[ResponseT],
1719
1788
  body: Body | None = None,
1789
+ content: AsyncBinaryTypes | None = None,
1720
1790
  files: RequestFiles | None = None,
1721
1791
  options: RequestOptions = {},
1722
1792
  stream: Literal[False] = False,
@@ -1729,6 +1799,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1729
1799
  *,
1730
1800
  cast_to: Type[ResponseT],
1731
1801
  body: Body | None = None,
1802
+ content: AsyncBinaryTypes | None = None,
1732
1803
  files: RequestFiles | None = None,
1733
1804
  options: RequestOptions = {},
1734
1805
  stream: Literal[True],
@@ -1742,6 +1813,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1742
1813
  *,
1743
1814
  cast_to: Type[ResponseT],
1744
1815
  body: Body | None = None,
1816
+ content: AsyncBinaryTypes | None = None,
1745
1817
  files: RequestFiles | None = None,
1746
1818
  options: RequestOptions = {},
1747
1819
  stream: bool,
@@ -1754,13 +1826,25 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1754
1826
  *,
1755
1827
  cast_to: Type[ResponseT],
1756
1828
  body: Body | None = None,
1829
+ content: AsyncBinaryTypes | None = None,
1757
1830
  files: RequestFiles | None = None,
1758
1831
  options: RequestOptions = {},
1759
1832
  stream: bool = False,
1760
1833
  stream_cls: type[_AsyncStreamT] | None = None,
1761
1834
  ) -> ResponseT | _AsyncStreamT:
1835
+ if body is not None and content is not None:
1836
+ raise TypeError("Passing both `body` and `content` is not supported")
1837
+ if files is not None and content is not None:
1838
+ raise TypeError("Passing both `files` and `content` is not supported")
1839
+ if isinstance(body, bytes):
1840
+ warnings.warn(
1841
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1842
+ "Please pass raw bytes via the `content` parameter instead.",
1843
+ DeprecationWarning,
1844
+ stacklevel=2,
1845
+ )
1762
1846
  opts = FinalRequestOptions.construct(
1763
- method="post", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1847
+ method="post", url=path, json_data=body, content=content, files=await async_to_httpx_files(files), **options
1764
1848
  )
1765
1849
  return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
1766
1850
 
@@ -1770,11 +1854,28 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1770
1854
  *,
1771
1855
  cast_to: Type[ResponseT],
1772
1856
  body: Body | None = None,
1857
+ content: AsyncBinaryTypes | None = None,
1773
1858
  files: RequestFiles | None = None,
1774
1859
  options: RequestOptions = {},
1775
1860
  ) -> ResponseT:
1861
+ if body is not None and content is not None:
1862
+ raise TypeError("Passing both `body` and `content` is not supported")
1863
+ if files is not None and content is not None:
1864
+ raise TypeError("Passing both `files` and `content` is not supported")
1865
+ if isinstance(body, bytes):
1866
+ warnings.warn(
1867
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1868
+ "Please pass raw bytes via the `content` parameter instead.",
1869
+ DeprecationWarning,
1870
+ stacklevel=2,
1871
+ )
1776
1872
  opts = FinalRequestOptions.construct(
1777
- method="patch", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1873
+ method="patch",
1874
+ url=path,
1875
+ json_data=body,
1876
+ content=content,
1877
+ files=await async_to_httpx_files(files),
1878
+ **options,
1778
1879
  )
1779
1880
  return await self.request(cast_to, opts)
1780
1881
 
@@ -1784,11 +1885,23 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1784
1885
  *,
1785
1886
  cast_to: Type[ResponseT],
1786
1887
  body: Body | None = None,
1888
+ content: AsyncBinaryTypes | None = None,
1787
1889
  files: RequestFiles | None = None,
1788
1890
  options: RequestOptions = {},
1789
1891
  ) -> ResponseT:
1892
+ if body is not None and content is not None:
1893
+ raise TypeError("Passing both `body` and `content` is not supported")
1894
+ if files is not None and content is not None:
1895
+ raise TypeError("Passing both `files` and `content` is not supported")
1896
+ if isinstance(body, bytes):
1897
+ warnings.warn(
1898
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1899
+ "Please pass raw bytes via the `content` parameter instead.",
1900
+ DeprecationWarning,
1901
+ stacklevel=2,
1902
+ )
1790
1903
  opts = FinalRequestOptions.construct(
1791
- method="put", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1904
+ method="put", url=path, json_data=body, content=content, files=await async_to_httpx_files(files), **options
1792
1905
  )
1793
1906
  return await self.request(cast_to, opts)
1794
1907
 
@@ -1798,9 +1911,19 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1798
1911
  *,
1799
1912
  cast_to: Type[ResponseT],
1800
1913
  body: Body | None = None,
1914
+ content: AsyncBinaryTypes | None = None,
1801
1915
  options: RequestOptions = {},
1802
1916
  ) -> ResponseT:
1803
- opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options)
1917
+ if body is not None and content is not None:
1918
+ raise TypeError("Passing both `body` and `content` is not supported")
1919
+ if isinstance(body, bytes):
1920
+ warnings.warn(
1921
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1922
+ "Please pass raw bytes via the `content` parameter instead.",
1923
+ DeprecationWarning,
1924
+ stacklevel=2,
1925
+ )
1926
+ opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, content=content, **options)
1804
1927
  return await self.request(cast_to, opts)
1805
1928
 
1806
1929
  def get_api_list(
@@ -33,6 +33,7 @@ from ._base_client import (
33
33
  if TYPE_CHECKING:
34
34
  from .resources import (
35
35
  chat,
36
+ build,
36
37
  files,
37
38
  spans,
38
39
  models,
@@ -47,6 +48,7 @@ if TYPE_CHECKING:
47
48
  evaluation_items,
48
49
  span_assessments,
49
50
  )
51
+ from .resources.build import BuildResource, AsyncBuildResource
50
52
  from .resources.spans import SpansResource, AsyncSpansResource
51
53
  from .resources.models import ModelsResource, AsyncModelsResource
52
54
  from .resources.datasets import DatasetsResource, AsyncDatasetsResource
@@ -171,6 +173,8 @@ class SGPClient(SyncAPIClient):
171
173
  _strict_response_validation=_strict_response_validation,
172
174
  )
173
175
 
176
+ self._default_stream_cls = Stream
177
+
174
178
  @cached_property
175
179
  def responses(self) -> ResponsesResource:
176
180
  from .resources.responses import ResponsesResource
@@ -255,6 +259,12 @@ class SGPClient(SyncAPIClient):
255
259
 
256
260
  return CredentialsResource(self)
257
261
 
262
+ @cached_property
263
+ def build(self) -> BuildResource:
264
+ from .resources.build import BuildResource
265
+
266
+ return BuildResource(self)
267
+
258
268
  @cached_property
259
269
  def with_raw_response(self) -> SGPClientWithRawResponse:
260
270
  return SGPClientWithRawResponse(self)
@@ -464,6 +474,8 @@ class AsyncSGPClient(AsyncAPIClient):
464
474
  _strict_response_validation=_strict_response_validation,
465
475
  )
466
476
 
477
+ self._default_stream_cls = AsyncStream
478
+
467
479
  @cached_property
468
480
  def responses(self) -> AsyncResponsesResource:
469
481
  from .resources.responses import AsyncResponsesResource
@@ -548,6 +560,12 @@ class AsyncSGPClient(AsyncAPIClient):
548
560
 
549
561
  return AsyncCredentialsResource(self)
550
562
 
563
+ @cached_property
564
+ def build(self) -> AsyncBuildResource:
565
+ from .resources.build import AsyncBuildResource
566
+
567
+ return AsyncBuildResource(self)
568
+
551
569
  @cached_property
552
570
  def with_raw_response(self) -> AsyncSGPClientWithRawResponse:
553
571
  return AsyncSGPClientWithRawResponse(self)
@@ -756,6 +774,12 @@ class SGPClientWithRawResponse:
756
774
 
757
775
  return CredentialsResourceWithRawResponse(self._client.credentials)
758
776
 
777
+ @cached_property
778
+ def build(self) -> build.BuildResourceWithRawResponse:
779
+ from .resources.build import BuildResourceWithRawResponse
780
+
781
+ return BuildResourceWithRawResponse(self._client.build)
782
+
759
783
 
760
784
  class AsyncSGPClientWithRawResponse:
761
785
  _client: AsyncSGPClient
@@ -847,6 +871,12 @@ class AsyncSGPClientWithRawResponse:
847
871
 
848
872
  return AsyncCredentialsResourceWithRawResponse(self._client.credentials)
849
873
 
874
+ @cached_property
875
+ def build(self) -> build.AsyncBuildResourceWithRawResponse:
876
+ from .resources.build import AsyncBuildResourceWithRawResponse
877
+
878
+ return AsyncBuildResourceWithRawResponse(self._client.build)
879
+
850
880
 
851
881
  class SGPClientWithStreamedResponse:
852
882
  _client: SGPClient
@@ -938,6 +968,12 @@ class SGPClientWithStreamedResponse:
938
968
 
939
969
  return CredentialsResourceWithStreamingResponse(self._client.credentials)
940
970
 
971
+ @cached_property
972
+ def build(self) -> build.BuildResourceWithStreamingResponse:
973
+ from .resources.build import BuildResourceWithStreamingResponse
974
+
975
+ return BuildResourceWithStreamingResponse(self._client.build)
976
+
941
977
 
942
978
  class AsyncSGPClientWithStreamedResponse:
943
979
  _client: AsyncSGPClient
@@ -1029,6 +1065,12 @@ class AsyncSGPClientWithStreamedResponse:
1029
1065
 
1030
1066
  return AsyncCredentialsResourceWithStreamingResponse(self._client.credentials)
1031
1067
 
1068
+ @cached_property
1069
+ def build(self) -> build.AsyncBuildResourceWithStreamingResponse:
1070
+ from .resources.build import AsyncBuildResourceWithStreamingResponse
1071
+
1072
+ return AsyncBuildResourceWithStreamingResponse(self._client.build)
1073
+
1032
1074
 
1033
1075
  Client = SGPClient
1034
1076