scale-gp-beta 0.1.0a28__tar.gz → 0.1.0a30__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.
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/.gitignore +0 -1
- scale_gp_beta-0.1.0a30/.release-please-manifest.json +3 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/CHANGELOG.md +59 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/PKG-INFO +2 -3
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/README.md +1 -2
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/api.md +25 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/pyproject.toml +2 -2
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_base_client.py +4 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_client.py +9 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_files.py +4 -4
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_models.py +24 -3
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_version.py +1 -1
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/lib/CONTRIBUTING.MD +53 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/integrations/openai/openai_span_type_map.py +3 -3
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/span.py +8 -7
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/trace.py +7 -5
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/trace_queue_manager.py +14 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/tracing.py +7 -5
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/lib/tracing/types.py +5 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/__init__.py +14 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/chat/completions.py +4 -0
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/resources/responses.py +314 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/spans.py +28 -144
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/__init__.py +19 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/chat_completion.py +61 -6
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/chat_completion_chunk.py +17 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/completion_models_params.py +2 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/model_definition.py +6 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/completion.py +8 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/container.py +0 -6
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset.py +3 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_item.py +3 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation.py +3 -7
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_item.py +3 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_task.py +31 -55
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_task_param.py +28 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/file.py +3 -1
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/inference_model.py +3 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/question.py +11 -10
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/types/response.py +2852 -0
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/types/response_create_params.py +817 -0
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/types/response_create_response.py +20891 -0
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/types/shared/__init__.py +3 -0
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/types/shared/identity.py +16 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span.py +9 -33
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span_batch_params.py +6 -30
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span_create_params.py +6 -30
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span_search_params.py +8 -37
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/types/span_status.py +7 -0
- scale_gp_beta-0.1.0a30/src/scale_gp_beta/types/span_type.py +33 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span_update_params.py +3 -2
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span_upsert_batch_params.py +6 -30
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/chat/test_completions.py +2 -0
- scale_gp_beta-0.1.0a30/tests/api_resources/test_responses.py +138 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_spans.py +4 -6
- scale_gp_beta-0.1.0a30/tests/lib/tracing/test_trace_queue_manager.py +80 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_models.py +28 -1
- scale_gp_beta-0.1.0a28/.release-please-manifest.json +0 -3
- scale_gp_beta-0.1.0a28/src/scale_gp_beta/lib/tracing/types.py +0 -43
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/CONTRIBUTING.md +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/LICENSE +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/SECURITY.md +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/bin/check-release-environment +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/bin/publish-pypi +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/examples/.keep +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/examples/tracing/0_primitives_fibonacci.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/examples/tracing/1_explicit_use_case.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/examples/tracing/2_direct_upload.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/examples/tracing/3_openai_agent_tracing.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/mypy.ini +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/noxfile.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/release-please-config.json +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/requirements-dev.lock +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/requirements.lock +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp/lib/.keep +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_compat.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_constants.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_exceptions.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_qs.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_resource.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_streaming.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_types.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_logs.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_proxy.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_reflection.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_resources_proxy.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_streams.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_sync.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_transform.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_typing.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/_utils/_utils.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/.keep +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/exceptions.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/integrations/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/integrations/openai/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/integrations/openai/openai_tracing_sgp_processor.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/integrations/openai/utils.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/scope.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/trace_exporter.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/lib/tracing/util.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/pagination.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/py.typed +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/chat/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/chat/chat.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/completions.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/dataset_items.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/datasets.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/evaluation_items.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/evaluations.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/files/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/files/content.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/files/files.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/inference.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/models.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/resources/questions.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/completion_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/completion_create_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/chat/completion_models_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/completion_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/component.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/component_param.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/container_param.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_item_batch_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_item_batch_create_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_item_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_item_list_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_item_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_item_update_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_list_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/dataset_update_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_item_list_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_item_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_list_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/evaluation_update_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/file_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/file_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/file_list.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/file_list_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/file_update_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/files/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/inference_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/inference_create_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/inference_model_list.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/inference_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/inference_response_chunk.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/item_locator.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/item_locator_template.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/model_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/model_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/model_list_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/model_update_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/question_create_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/question_list.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/question_list_params.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span_batch_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/scale_gp_beta/types/span_upsert_batch_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/src/sgp_dev/lib/.keep +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/chat/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/files/__init__.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/files/test_content.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_completions.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_dataset_items.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_datasets.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_evaluation_items.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_evaluations.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_files.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_inference.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_models.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/api_resources/test_questions.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/conftest.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/lib/tracing/test_span.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/lib/tracing/test_trace.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/lib/tracing/test_trace_exporter.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/lib/tracing/test_tracing.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/sample_file.txt +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_client.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_deepcopy.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_extract_files.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_files.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_qs.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_required_args.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_response.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_streaming.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_transform.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_utils/test_proxy.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/test_utils/test_typing.py +0 -0
- {scale_gp_beta-0.1.0a28 → scale_gp_beta-0.1.0a30}/tests/utils.py +0 -0
|
@@ -1,5 +1,64 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.0-alpha.30 (2025-08-26)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.1.0-alpha.29...v0.1.0-alpha.30](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.29...v0.1.0-alpha.30)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([cb4c1c5](https://github.com/scaleapi/sgp-python-beta/commit/cb4c1c5edb6a15c7e3e998d54c83604f9c6bb3a1))
|
|
10
|
+
* **api:** api update ([32e9415](https://github.com/scaleapi/sgp-python-beta/commit/32e9415aa3fc23ebdae39d438cabf8c6a2496b49))
|
|
11
|
+
* **api:** api update ([8146bf3](https://github.com/scaleapi/sgp-python-beta/commit/8146bf3e9e9c65defb95d3a80525538cb05fa825))
|
|
12
|
+
* **api:** api update ([b112792](https://github.com/scaleapi/sgp-python-beta/commit/b1127924897e97dbf82f342b53f926407cf84591))
|
|
13
|
+
* **api:** api update ([674f2b1](https://github.com/scaleapi/sgp-python-beta/commit/674f2b1c7289ebf7ca41be8b91913df2da04835e))
|
|
14
|
+
* **api:** api update ([48c91fa](https://github.com/scaleapi/sgp-python-beta/commit/48c91fa1edf4b05196ad396e092d26e102a31ae2))
|
|
15
|
+
* **api:** api update ([680a7f9](https://github.com/scaleapi/sgp-python-beta/commit/680a7f9fff37bed71a05bed10928ef0ceae19079))
|
|
16
|
+
* **api:** api update ([d44ffe4](https://github.com/scaleapi/sgp-python-beta/commit/d44ffe4df3e02a55abb1d73abca68e2978a95f07))
|
|
17
|
+
* **api:** api update ([8ce7997](https://github.com/scaleapi/sgp-python-beta/commit/8ce79973d97ec3f4e362301979fd055a4021e046))
|
|
18
|
+
* **api:** api update ([fddd794](https://github.com/scaleapi/sgp-python-beta/commit/fddd7945fa11de496a252c30f950e717dbde2a71))
|
|
19
|
+
* **api:** api update ([491142b](https://github.com/scaleapi/sgp-python-beta/commit/491142b453f9f37b0907982e2a35819b05c79aba))
|
|
20
|
+
* **api:** api update ([4a8519e](https://github.com/scaleapi/sgp-python-beta/commit/4a8519eacadbdf4e7e5094b61671ec5282330772))
|
|
21
|
+
* **api:** api update ([c8bf560](https://github.com/scaleapi/sgp-python-beta/commit/c8bf5604617ddf3b23e35d3fa63f8992e27cc677))
|
|
22
|
+
* **api:** manual updates ([b86c069](https://github.com/scaleapi/sgp-python-beta/commit/b86c0694240b1d7c1925d1ec7ef48a230939a795))
|
|
23
|
+
* **api:** manual updates ([8efcc54](https://github.com/scaleapi/sgp-python-beta/commit/8efcc5412b8f912c8b7fc94eaf72ee6f2de8f9e3))
|
|
24
|
+
* **api:** manual updates ([d8144e7](https://github.com/scaleapi/sgp-python-beta/commit/d8144e7b869b9ccb10e1c23997d3e28bddc5d5df))
|
|
25
|
+
* clean up environment call outs ([8aa4d07](https://github.com/scaleapi/sgp-python-beta/commit/8aa4d075fcebffcf02fc539525c6af434291e823))
|
|
26
|
+
* **client:** support file upload requests ([76d95ab](https://github.com/scaleapi/sgp-python-beta/commit/76d95abb89870b14e6303de8ef52e764bbe4403a))
|
|
27
|
+
* SGP client hooks ([#128](https://github.com/scaleapi/sgp-python-beta/issues/128)) ([f247adb](https://github.com/scaleapi/sgp-python-beta/commit/f247adb2273f081c2d2083cc256e43c08b83c21a))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* **parsing:** ignore empty metadata ([a1190e2](https://github.com/scaleapi/sgp-python-beta/commit/a1190e280c32aaac4faad6d496e012eedfeb9490))
|
|
33
|
+
* **parsing:** parse extra field types ([6b64a45](https://github.com/scaleapi/sgp-python-beta/commit/6b64a450d2a0b70ea857b58ccbc3540f1ad7713b))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Chores
|
|
37
|
+
|
|
38
|
+
* Added CONTRIBUTING.MD for lib ([#127](https://github.com/scaleapi/sgp-python-beta/issues/127)) ([2b1bda7](https://github.com/scaleapi/sgp-python-beta/commit/2b1bda7ab925c4c8c44976f72f9f5723a9e61f30))
|
|
39
|
+
* **internal:** change ci workflow machines ([d7ace41](https://github.com/scaleapi/sgp-python-beta/commit/d7ace4109f8a7f2a98dd8f2cc526fee2b40f85b5))
|
|
40
|
+
* **internal:** fix ruff target version ([057e041](https://github.com/scaleapi/sgp-python-beta/commit/057e041dc7ec6638e68ba66868bbd851aeaba3b8))
|
|
41
|
+
* **internal:** update comment in script ([4760add](https://github.com/scaleapi/sgp-python-beta/commit/4760add2d22f15b47d5d8b4153dc7744523a0c63))
|
|
42
|
+
* **project:** add settings file for vscode ([ae9740b](https://github.com/scaleapi/sgp-python-beta/commit/ae9740bd28d7aaa21a089cd328554caea643a538))
|
|
43
|
+
* **types:** rebuild Pydantic models after all types are defined ([a1d6eec](https://github.com/scaleapi/sgp-python-beta/commit/a1d6eece8eaae0e783eda5aad65dceb62249cdad))
|
|
44
|
+
* update @stainless-api/prism-cli to v5.15.0 ([a15a320](https://github.com/scaleapi/sgp-python-beta/commit/a15a320bf13cdc88ffc312253655ad97dfa517a9))
|
|
45
|
+
* update github action ([f78e671](https://github.com/scaleapi/sgp-python-beta/commit/f78e67191edd058555d76a45f5b08d4bf974a2c4))
|
|
46
|
+
|
|
47
|
+
## 0.1.0-alpha.29 (2025-07-14)
|
|
48
|
+
|
|
49
|
+
Full Changelog: [v0.1.0-alpha.28...v0.1.0-alpha.29](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.28...v0.1.0-alpha.29)
|
|
50
|
+
|
|
51
|
+
### Features
|
|
52
|
+
|
|
53
|
+
* **api:** Add application_operation_type ([2455e20](https://github.com/scaleapi/sgp-python-beta/commit/2455e20838b22637ddce2a8e523f113d43acab0e))
|
|
54
|
+
* **api:** Add span status to span models ([c3fb91c](https://github.com/scaleapi/sgp-python-beta/commit/c3fb91c773d6ef11e1cc02e4546ff1923fc25c82))
|
|
55
|
+
* **api:** change name of app op type to span_type ([2285f10](https://github.com/scaleapi/sgp-python-beta/commit/2285f10ca3f1d51d3733996724d24daa09e83b88))
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
### Bug Fixes
|
|
59
|
+
|
|
60
|
+
* Use stainless types auto generated types for Span status and span type. ([#125](https://github.com/scaleapi/sgp-python-beta/issues/125)) ([6a3b070](https://github.com/scaleapi/sgp-python-beta/commit/6a3b07040137cb283711399bad76bedf78affcaf))
|
|
61
|
+
|
|
3
62
|
## 0.1.0-alpha.28 (2025-07-11)
|
|
4
63
|
|
|
5
64
|
Full Changelog: [v0.1.0-alpha.27...v0.1.0-alpha.28](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.27...v0.1.0-alpha.28)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: scale-gp-beta
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0a30
|
|
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
|
|
@@ -364,7 +364,6 @@ pip install --pre scale-gp-beta[aiohttp]
|
|
|
364
364
|
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
|
|
365
365
|
|
|
366
366
|
```python
|
|
367
|
-
import os
|
|
368
367
|
import asyncio
|
|
369
368
|
from scale_gp_beta import DefaultAioHttpClient
|
|
370
369
|
from scale_gp_beta import AsyncSGPClient
|
|
@@ -373,7 +372,7 @@ from scale_gp_beta import AsyncSGPClient
|
|
|
373
372
|
async def main() -> None:
|
|
374
373
|
async with AsyncSGPClient(
|
|
375
374
|
account_id="My Account ID",
|
|
376
|
-
api_key=
|
|
375
|
+
api_key="My API Key",
|
|
377
376
|
http_client=DefaultAioHttpClient(),
|
|
378
377
|
) as client:
|
|
379
378
|
completion = await client.chat.completions.create(
|
|
@@ -329,7 +329,6 @@ pip install --pre scale-gp-beta[aiohttp]
|
|
|
329
329
|
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
|
|
330
330
|
|
|
331
331
|
```python
|
|
332
|
-
import os
|
|
333
332
|
import asyncio
|
|
334
333
|
from scale_gp_beta import DefaultAioHttpClient
|
|
335
334
|
from scale_gp_beta import AsyncSGPClient
|
|
@@ -338,7 +337,7 @@ from scale_gp_beta import AsyncSGPClient
|
|
|
338
337
|
async def main() -> None:
|
|
339
338
|
async with AsyncSGPClient(
|
|
340
339
|
account_id="My Account ID",
|
|
341
|
-
api_key=
|
|
340
|
+
api_key="My API Key",
|
|
342
341
|
http_client=DefaultAioHttpClient(),
|
|
343
342
|
) as client:
|
|
344
343
|
completion = await client.chat.completions.create(
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
# Shared Types
|
|
2
|
+
|
|
3
|
+
```python
|
|
4
|
+
from scale_gp_beta.types import Identity
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
# Responses
|
|
8
|
+
|
|
9
|
+
Types:
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from scale_gp_beta.types import Response, ResponseCreateResponse
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Methods:
|
|
16
|
+
|
|
17
|
+
- <code title="post /v5/responses">client.responses.<a href="./src/scale_gp_beta/resources/responses.py">create</a>(\*\*<a href="src/scale_gp_beta/types/response_create_params.py">params</a>) -> <a href="./src/scale_gp_beta/types/response_create_response.py">ResponseCreateResponse</a></code>
|
|
18
|
+
|
|
1
19
|
# Completions
|
|
2
20
|
|
|
3
21
|
Types:
|
|
@@ -171,7 +189,13 @@ Methods:
|
|
|
171
189
|
Types:
|
|
172
190
|
|
|
173
191
|
```python
|
|
174
|
-
from scale_gp_beta.types import
|
|
192
|
+
from scale_gp_beta.types import (
|
|
193
|
+
Span,
|
|
194
|
+
SpanStatus,
|
|
195
|
+
SpanType,
|
|
196
|
+
SpanBatchResponse,
|
|
197
|
+
SpanUpsertBatchResponse,
|
|
198
|
+
)
|
|
175
199
|
```
|
|
176
200
|
|
|
177
201
|
Methods:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "scale-gp-beta"
|
|
3
|
-
version = "0.1.0-alpha.
|
|
3
|
+
version = "0.1.0-alpha.30"
|
|
4
4
|
description = "The official Python library for the Scale GP API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -159,7 +159,7 @@ reportPrivateUsage = false
|
|
|
159
159
|
[tool.ruff]
|
|
160
160
|
line-length = 120
|
|
161
161
|
output-format = "grouped"
|
|
162
|
-
target-version = "
|
|
162
|
+
target-version = "py38"
|
|
163
163
|
|
|
164
164
|
[tool.ruff.format]
|
|
165
165
|
docstring-code-format = true
|
|
@@ -532,7 +532,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
532
532
|
is_body_allowed = options.method.lower() != "get"
|
|
533
533
|
|
|
534
534
|
if is_body_allowed:
|
|
535
|
-
|
|
535
|
+
if isinstance(json_data, bytes):
|
|
536
|
+
kwargs["content"] = json_data
|
|
537
|
+
else:
|
|
538
|
+
kwargs["json"] = json_data if is_given(json_data) else None
|
|
536
539
|
kwargs["files"] = files
|
|
537
540
|
else:
|
|
538
541
|
headers.pop("Content-Type", None)
|
|
@@ -27,6 +27,7 @@ from .resources import (
|
|
|
27
27
|
datasets,
|
|
28
28
|
inference,
|
|
29
29
|
questions,
|
|
30
|
+
responses,
|
|
30
31
|
completions,
|
|
31
32
|
evaluations,
|
|
32
33
|
dataset_items,
|
|
@@ -61,6 +62,7 @@ ENVIRONMENTS: Dict[str, str] = {
|
|
|
61
62
|
|
|
62
63
|
|
|
63
64
|
class SGPClient(SyncAPIClient):
|
|
65
|
+
responses: responses.ResponsesResource
|
|
64
66
|
completions: completions.CompletionsResource
|
|
65
67
|
chat: chat.ChatResource
|
|
66
68
|
inference: inference.InferenceResource
|
|
@@ -165,6 +167,7 @@ class SGPClient(SyncAPIClient):
|
|
|
165
167
|
_strict_response_validation=_strict_response_validation,
|
|
166
168
|
)
|
|
167
169
|
|
|
170
|
+
self.responses = responses.ResponsesResource(self)
|
|
168
171
|
self.completions = completions.CompletionsResource(self)
|
|
169
172
|
self.chat = chat.ChatResource(self)
|
|
170
173
|
self.inference = inference.InferenceResource(self)
|
|
@@ -290,6 +293,7 @@ class SGPClient(SyncAPIClient):
|
|
|
290
293
|
|
|
291
294
|
|
|
292
295
|
class AsyncSGPClient(AsyncAPIClient):
|
|
296
|
+
responses: responses.AsyncResponsesResource
|
|
293
297
|
completions: completions.AsyncCompletionsResource
|
|
294
298
|
chat: chat.AsyncChatResource
|
|
295
299
|
inference: inference.AsyncInferenceResource
|
|
@@ -394,6 +398,7 @@ class AsyncSGPClient(AsyncAPIClient):
|
|
|
394
398
|
_strict_response_validation=_strict_response_validation,
|
|
395
399
|
)
|
|
396
400
|
|
|
401
|
+
self.responses = responses.AsyncResponsesResource(self)
|
|
397
402
|
self.completions = completions.AsyncCompletionsResource(self)
|
|
398
403
|
self.chat = chat.AsyncChatResource(self)
|
|
399
404
|
self.inference = inference.AsyncInferenceResource(self)
|
|
@@ -520,6 +525,7 @@ class AsyncSGPClient(AsyncAPIClient):
|
|
|
520
525
|
|
|
521
526
|
class SGPClientWithRawResponse:
|
|
522
527
|
def __init__(self, client: SGPClient) -> None:
|
|
528
|
+
self.responses = responses.ResponsesResourceWithRawResponse(client.responses)
|
|
523
529
|
self.completions = completions.CompletionsResourceWithRawResponse(client.completions)
|
|
524
530
|
self.chat = chat.ChatResourceWithRawResponse(client.chat)
|
|
525
531
|
self.inference = inference.InferenceResourceWithRawResponse(client.inference)
|
|
@@ -535,6 +541,7 @@ class SGPClientWithRawResponse:
|
|
|
535
541
|
|
|
536
542
|
class AsyncSGPClientWithRawResponse:
|
|
537
543
|
def __init__(self, client: AsyncSGPClient) -> None:
|
|
544
|
+
self.responses = responses.AsyncResponsesResourceWithRawResponse(client.responses)
|
|
538
545
|
self.completions = completions.AsyncCompletionsResourceWithRawResponse(client.completions)
|
|
539
546
|
self.chat = chat.AsyncChatResourceWithRawResponse(client.chat)
|
|
540
547
|
self.inference = inference.AsyncInferenceResourceWithRawResponse(client.inference)
|
|
@@ -550,6 +557,7 @@ class AsyncSGPClientWithRawResponse:
|
|
|
550
557
|
|
|
551
558
|
class SGPClientWithStreamedResponse:
|
|
552
559
|
def __init__(self, client: SGPClient) -> None:
|
|
560
|
+
self.responses = responses.ResponsesResourceWithStreamingResponse(client.responses)
|
|
553
561
|
self.completions = completions.CompletionsResourceWithStreamingResponse(client.completions)
|
|
554
562
|
self.chat = chat.ChatResourceWithStreamingResponse(client.chat)
|
|
555
563
|
self.inference = inference.InferenceResourceWithStreamingResponse(client.inference)
|
|
@@ -565,6 +573,7 @@ class SGPClientWithStreamedResponse:
|
|
|
565
573
|
|
|
566
574
|
class AsyncSGPClientWithStreamedResponse:
|
|
567
575
|
def __init__(self, client: AsyncSGPClient) -> None:
|
|
576
|
+
self.responses = responses.AsyncResponsesResourceWithStreamingResponse(client.responses)
|
|
568
577
|
self.completions = completions.AsyncCompletionsResourceWithStreamingResponse(client.completions)
|
|
569
578
|
self.chat = chat.AsyncChatResourceWithStreamingResponse(client.chat)
|
|
570
579
|
self.inference = inference.AsyncInferenceResourceWithStreamingResponse(client.inference)
|
|
@@ -69,12 +69,12 @@ def _transform_file(file: FileTypes) -> HttpxFileTypes:
|
|
|
69
69
|
return file
|
|
70
70
|
|
|
71
71
|
if is_tuple_t(file):
|
|
72
|
-
return (file[0],
|
|
72
|
+
return (file[0], read_file_content(file[1]), *file[2:])
|
|
73
73
|
|
|
74
74
|
raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple")
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
def
|
|
77
|
+
def read_file_content(file: FileContent) -> HttpxFileContent:
|
|
78
78
|
if isinstance(file, os.PathLike):
|
|
79
79
|
return pathlib.Path(file).read_bytes()
|
|
80
80
|
return file
|
|
@@ -111,12 +111,12 @@ async def _async_transform_file(file: FileTypes) -> HttpxFileTypes:
|
|
|
111
111
|
return file
|
|
112
112
|
|
|
113
113
|
if is_tuple_t(file):
|
|
114
|
-
return (file[0], await
|
|
114
|
+
return (file[0], await async_read_file_content(file[1]), *file[2:])
|
|
115
115
|
|
|
116
116
|
raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple")
|
|
117
117
|
|
|
118
118
|
|
|
119
|
-
async def
|
|
119
|
+
async def async_read_file_content(file: FileContent) -> HttpxFileContent:
|
|
120
120
|
if isinstance(file, os.PathLike):
|
|
121
121
|
return await anyio.Path(file).read_bytes()
|
|
122
122
|
|
|
@@ -208,14 +208,18 @@ class BaseModel(pydantic.BaseModel):
|
|
|
208
208
|
else:
|
|
209
209
|
fields_values[name] = field_get_default(field)
|
|
210
210
|
|
|
211
|
+
extra_field_type = _get_extra_fields_type(__cls)
|
|
212
|
+
|
|
211
213
|
_extra = {}
|
|
212
214
|
for key, value in values.items():
|
|
213
215
|
if key not in model_fields:
|
|
216
|
+
parsed = construct_type(value=value, type_=extra_field_type) if extra_field_type is not None else value
|
|
217
|
+
|
|
214
218
|
if PYDANTIC_V2:
|
|
215
|
-
_extra[key] =
|
|
219
|
+
_extra[key] = parsed
|
|
216
220
|
else:
|
|
217
221
|
_fields_set.add(key)
|
|
218
|
-
fields_values[key] =
|
|
222
|
+
fields_values[key] = parsed
|
|
219
223
|
|
|
220
224
|
object.__setattr__(m, "__dict__", fields_values)
|
|
221
225
|
|
|
@@ -370,6 +374,23 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object:
|
|
|
370
374
|
return construct_type(value=value, type_=type_, metadata=getattr(field, "metadata", None))
|
|
371
375
|
|
|
372
376
|
|
|
377
|
+
def _get_extra_fields_type(cls: type[pydantic.BaseModel]) -> type | None:
|
|
378
|
+
if not PYDANTIC_V2:
|
|
379
|
+
# TODO
|
|
380
|
+
return None
|
|
381
|
+
|
|
382
|
+
schema = cls.__pydantic_core_schema__
|
|
383
|
+
if schema["type"] == "model":
|
|
384
|
+
fields = schema["schema"]
|
|
385
|
+
if fields["type"] == "model-fields":
|
|
386
|
+
extras = fields.get("extras_schema")
|
|
387
|
+
if extras and "cls" in extras:
|
|
388
|
+
# mypy can't narrow the type
|
|
389
|
+
return extras["cls"] # type: ignore[no-any-return]
|
|
390
|
+
|
|
391
|
+
return None
|
|
392
|
+
|
|
393
|
+
|
|
373
394
|
def is_basemodel(type_: type) -> bool:
|
|
374
395
|
"""Returns whether or not the given type is either a `BaseModel` or a union of `BaseModel`"""
|
|
375
396
|
if is_union(type_):
|
|
@@ -439,7 +460,7 @@ def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]
|
|
|
439
460
|
type_ = type_.__value__ # type: ignore[unreachable]
|
|
440
461
|
|
|
441
462
|
# unwrap `Annotated[T, ...]` -> `T`
|
|
442
|
-
if metadata is not None:
|
|
463
|
+
if metadata is not None and len(metadata) > 0:
|
|
443
464
|
meta: tuple[Any, ...] = tuple(metadata)
|
|
444
465
|
elif is_annotated_type(type_):
|
|
445
466
|
meta = get_args(type_)[1:]
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Custom Code Patch
|
|
2
|
+
You can in theory add custom code patches to anywhere in the repo but at the risk of encountering many merge conflicts with Stainless into the future.
|
|
3
|
+
Stainless will never use the `/lib` and `/examples` directories. When possible try to only modify these directories.
|
|
4
|
+
If you have to add custom code elsewhere, please keep the footprint small and create a library for most of the logic.
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
For information on custom code patching with Stainless see [here](https://www.stainless.com/docs/guides/add-custom-code).
|
|
8
|
+
|
|
9
|
+
# Process for Adding Features
|
|
10
|
+
Checkout the `next` branch and pull, then create a branch from `next`.
|
|
11
|
+
|
|
12
|
+
> **_NOTE:_** Stainless uses next to "queue up" updates to the SDK.
|
|
13
|
+
>
|
|
14
|
+
> Stainless will update next with their own logic updates to the SDK along with any changes in the OpenAPI spec and changes to the Stainless
|
|
15
|
+
config on their SaaS platform.
|
|
16
|
+
|
|
17
|
+
Make any code changes you need. Ensuring all the tests for the library are passing.
|
|
18
|
+
|
|
19
|
+
There is strict linting in this repo. Use the following commands in order.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
rye lint --fix
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
rye run lint | grep /specific_file.py
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`rye run lint` will not work if there are errors with `rye lint --fix`.
|
|
30
|
+
I am unsure why but I get many errors which are ignorable in the rest of the repo when running `rye run lint` so I usually use it
|
|
31
|
+
with grep to target the file I am developing.
|
|
32
|
+
|
|
33
|
+
> **_NOTE:_** The strict linting requires all types to be strictly typed. This can be a pain but is worth considering before developing any new solution.
|
|
34
|
+
> Try and avoid using ignore commands when possible, but sometimes it is unavoidable (see OpenAI tracing Plugin).
|
|
35
|
+
|
|
36
|
+
When commiting, use the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec. Usually this is something like:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
git commit -m "feat: Added OpenAI tracing processor"
|
|
40
|
+
```
|
|
41
|
+
This allow Stainless to update the release doc with more useful info.
|
|
42
|
+
|
|
43
|
+
**When creating a PR, you must manually change the destination from `main` to `next`.**
|
|
44
|
+
|
|
45
|
+
Once merged, Stainless should pick up the changes and update or create a new PR for `main`.
|
|
46
|
+
You will need to accept changes on this PR, Stainless should then auto merge. Note on occasion I have had to manually merge.
|
|
47
|
+
There was no consequence to this.
|
|
48
|
+
|
|
49
|
+
These PRs Stainless makes have 4 types of changes, all are merged to main via these automatic PR requests:
|
|
50
|
+
1. Custom Code Changes
|
|
51
|
+
2. Stainless SDK logic changes
|
|
52
|
+
3. Changes to the Stainless Config in the SaaS platform
|
|
53
|
+
4. Changes to the OpenAPI schema
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from typing import Dict, Optional
|
|
2
2
|
|
|
3
|
-
from scale_gp_beta.
|
|
3
|
+
from scale_gp_beta.types import SpanType
|
|
4
4
|
|
|
5
|
-
OPENAI_SPAN_TYPE_MAP: Dict[str,
|
|
5
|
+
OPENAI_SPAN_TYPE_MAP: Dict[str, SpanType] = {
|
|
6
6
|
"generation": "COMPLETION",
|
|
7
7
|
"agent": "AGENT_WORKFLOW",
|
|
8
8
|
"function": "CODE_EXECUTION",
|
|
@@ -17,7 +17,7 @@ OPENAI_SPAN_TYPE_MAP: Dict[str, SpanTypeLiterals] = {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
def openai_span_type_map(span_type: Optional[str]) ->
|
|
20
|
+
def openai_span_type_map(span_type: Optional[str]) -> SpanType:
|
|
21
21
|
"""
|
|
22
22
|
Maps an OpenAI span type string to its corresponding SGP SpanTypeLiteral.
|
|
23
23
|
|
|
@@ -6,11 +6,12 @@ from typing import TYPE_CHECKING, Type, Optional
|
|
|
6
6
|
from threading import RLock
|
|
7
7
|
from typing_extensions import override
|
|
8
8
|
|
|
9
|
+
from scale_gp_beta.types import SpanType, SpanStatus
|
|
9
10
|
from scale_gp_beta.types.span_upsert_batch_params import Item as SpanCreateRequest
|
|
10
11
|
|
|
11
12
|
from .util import iso_timestamp, generate_span_id
|
|
12
13
|
from .scope import Scope
|
|
13
|
-
from .types import SpanInputParam, SpanOutputParam,
|
|
14
|
+
from .types import SpanInputParam, SpanOutputParam, SpanMetadataParam
|
|
14
15
|
from .exceptions import ParamsCreationError
|
|
15
16
|
|
|
16
17
|
if TYPE_CHECKING:
|
|
@@ -59,7 +60,7 @@ class BaseSpan:
|
|
|
59
60
|
input: Optional[SpanInputParam] = None,
|
|
60
61
|
output: Optional[SpanOutputParam] = None,
|
|
61
62
|
metadata: Optional[SpanMetadataParam] = None,
|
|
62
|
-
span_type:
|
|
63
|
+
span_type: SpanType = "STANDALONE"
|
|
63
64
|
):
|
|
64
65
|
self._name = name
|
|
65
66
|
self._trace_id: str = trace_id or "no_trace_id"
|
|
@@ -71,8 +72,8 @@ class BaseSpan:
|
|
|
71
72
|
self._input: SpanInputParam = input or {}
|
|
72
73
|
self._output: SpanOutputParam = output or {}
|
|
73
74
|
self._metadata: SpanMetadataParam = metadata or {}
|
|
74
|
-
self._span_type:
|
|
75
|
-
self._status:
|
|
75
|
+
self._span_type: SpanType = span_type
|
|
76
|
+
self._status: SpanStatus = "SUCCESS"
|
|
76
77
|
self._queue_manager = queue_manager
|
|
77
78
|
|
|
78
79
|
self._contextvar_token: Optional[contextvars.Token[Optional[BaseSpan]]] = None
|
|
@@ -108,11 +109,11 @@ class BaseSpan:
|
|
|
108
109
|
return self._parent_span_id
|
|
109
110
|
|
|
110
111
|
@property
|
|
111
|
-
def status(self) ->
|
|
112
|
+
def status(self) -> SpanStatus:
|
|
112
113
|
return self._status
|
|
113
114
|
|
|
114
115
|
@property
|
|
115
|
-
def span_type(self) ->
|
|
116
|
+
def span_type(self) -> SpanType:
|
|
116
117
|
return self._span_type
|
|
117
118
|
|
|
118
119
|
# with setters
|
|
@@ -291,7 +292,7 @@ class Span(BaseSpan):
|
|
|
291
292
|
input: Optional[SpanInputParam] = None,
|
|
292
293
|
output: Optional[SpanOutputParam] = None,
|
|
293
294
|
metadata: Optional[SpanMetadataParam] = None,
|
|
294
|
-
span_type:
|
|
295
|
+
span_type: SpanType = "STANDALONE",
|
|
295
296
|
):
|
|
296
297
|
super().__init__(name, trace_id, queue_manager, span_id, parent_span_id, group_id, input, output, metadata, span_type)
|
|
297
298
|
self._queue_manager: TraceQueueManager = queue_manager
|
|
@@ -4,10 +4,12 @@ from types import TracebackType
|
|
|
4
4
|
from typing import Type, Optional
|
|
5
5
|
from typing_extensions import override
|
|
6
6
|
|
|
7
|
+
from scale_gp_beta.types import SpanType, SpanStatus
|
|
8
|
+
|
|
7
9
|
from .span import Span, BaseSpan, NoOpSpan
|
|
8
10
|
from .util import generate_trace_id
|
|
9
11
|
from .scope import Scope
|
|
10
|
-
from .types import SpanInputParam, SpanOutputParam,
|
|
12
|
+
from .types import SpanInputParam, SpanOutputParam, SpanMetadataParam
|
|
11
13
|
from .trace_queue_manager import TraceQueueManager
|
|
12
14
|
|
|
13
15
|
log: logging.Logger = logging.getLogger(__name__)
|
|
@@ -79,11 +81,11 @@ class BaseTrace:
|
|
|
79
81
|
return self.root_span.group_id
|
|
80
82
|
|
|
81
83
|
@property
|
|
82
|
-
def span_type(self) ->
|
|
84
|
+
def span_type(self) -> SpanType:
|
|
83
85
|
return self.root_span.span_type
|
|
84
86
|
|
|
85
87
|
@property
|
|
86
|
-
def status(self) ->
|
|
88
|
+
def status(self) -> SpanStatus:
|
|
87
89
|
return self.root_span.status
|
|
88
90
|
|
|
89
91
|
def set_error(
|
|
@@ -128,7 +130,7 @@ class NoOpTrace(BaseTrace):
|
|
|
128
130
|
trace_id: Optional[str] = None,
|
|
129
131
|
span_id: Optional[str] = None,
|
|
130
132
|
group_id: Optional[str] = None,
|
|
131
|
-
span_type:
|
|
133
|
+
span_type: SpanType = "TRACER",
|
|
132
134
|
input: Optional[SpanInputParam] = None,
|
|
133
135
|
output: Optional[SpanOutputParam] = None,
|
|
134
136
|
metadata: Optional[SpanMetadataParam] = None,
|
|
@@ -164,7 +166,7 @@ class Trace(BaseTrace):
|
|
|
164
166
|
trace_id: Optional[str] = None,
|
|
165
167
|
span_id: Optional[str] = None,
|
|
166
168
|
group_id: Optional[str] = None,
|
|
167
|
-
span_type:
|
|
169
|
+
span_type: SpanType = "TRACER",
|
|
168
170
|
input: Optional[SpanInputParam] = None,
|
|
169
171
|
output: Optional[SpanOutputParam] = None,
|
|
170
172
|
metadata: Optional[SpanMetadataParam] = None,
|
|
@@ -11,6 +11,8 @@ from .util import configure, is_disabled
|
|
|
11
11
|
from .trace_exporter import TraceExporter
|
|
12
12
|
|
|
13
13
|
if TYPE_CHECKING:
|
|
14
|
+
import httpx
|
|
15
|
+
|
|
14
16
|
from .span import Span
|
|
15
17
|
from .trace import Trace
|
|
16
18
|
|
|
@@ -44,6 +46,7 @@ class TraceQueueManager:
|
|
|
44
46
|
worker_enabled: Optional[bool] = None,
|
|
45
47
|
):
|
|
46
48
|
self._client = client
|
|
49
|
+
self.register_client(client) if client else None
|
|
47
50
|
self._attempted_local_client_creation = False
|
|
48
51
|
self._trigger_queue_size = trigger_queue_size
|
|
49
52
|
self._trigger_cadence = trigger_cadence
|
|
@@ -68,6 +71,17 @@ class TraceQueueManager:
|
|
|
68
71
|
log.info("Registering client")
|
|
69
72
|
self._client = client
|
|
70
73
|
|
|
74
|
+
original_prepare_request = self._client._prepare_request
|
|
75
|
+
|
|
76
|
+
def custom_prepare_request(request: "httpx.Request") -> None:
|
|
77
|
+
original_prepare_request(request)
|
|
78
|
+
|
|
79
|
+
# TODO: Hook logic here, we should check to see if we are in the scope of a span, if so we should inject
|
|
80
|
+
# appropriate headers into the request
|
|
81
|
+
# current_span = Scope.get_current_span()
|
|
82
|
+
|
|
83
|
+
self._client._prepare_request = custom_prepare_request # type: ignore
|
|
84
|
+
|
|
71
85
|
def shutdown(self, timeout: Optional[float] = None) -> None:
|
|
72
86
|
if not self._worker_enabled:
|
|
73
87
|
log.debug("No worker to shutdown")
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from typing import Optional
|
|
3
3
|
|
|
4
|
+
from scale_gp_beta.types import SpanType
|
|
5
|
+
|
|
4
6
|
from .span import Span, BaseSpan, NoOpSpan
|
|
5
7
|
from .util import is_disabled
|
|
6
8
|
from .scope import Scope
|
|
7
9
|
from .trace import Trace, BaseTrace, NoOpTrace
|
|
8
|
-
from .types import SpanInputParam, SpanOutputParam,
|
|
10
|
+
from .types import SpanInputParam, SpanOutputParam, SpanMetadataParam
|
|
9
11
|
from .trace_queue_manager import TraceQueueManager, tracing_queue_manager
|
|
10
12
|
|
|
11
13
|
log: logging.Logger = logging.getLogger(__name__)
|
|
@@ -51,7 +53,7 @@ def flush_queue() -> None:
|
|
|
51
53
|
|
|
52
54
|
def create_trace(
|
|
53
55
|
name: str,
|
|
54
|
-
span_type:
|
|
56
|
+
span_type: SpanType = "TRACER",
|
|
55
57
|
input: Optional[SpanInputParam] = None,
|
|
56
58
|
output: Optional[SpanOutputParam] = None,
|
|
57
59
|
metadata: Optional[SpanMetadataParam] = None,
|
|
@@ -74,7 +76,7 @@ def create_trace(
|
|
|
74
76
|
|
|
75
77
|
Args:
|
|
76
78
|
name: The name of the trace.
|
|
77
|
-
span_type (Optional[
|
|
79
|
+
span_type (Optional[SpanType]): Type of root span.
|
|
78
80
|
input (Optional[SpanInputParam]): Input of root span.
|
|
79
81
|
output (Optional[SpanOutputParam]): Output of root span.
|
|
80
82
|
metadata (Optional[SpanMetadataParam]): An optional, user-defined metadata.
|
|
@@ -131,7 +133,7 @@ def create_trace(
|
|
|
131
133
|
|
|
132
134
|
def create_span(
|
|
133
135
|
name: str,
|
|
134
|
-
span_type:
|
|
136
|
+
span_type: SpanType = "STANDALONE",
|
|
135
137
|
input: Optional[SpanInputParam] = None,
|
|
136
138
|
output: Optional[SpanOutputParam] = None,
|
|
137
139
|
metadata: Optional[SpanMetadataParam] = None,
|
|
@@ -160,7 +162,7 @@ def create_span(
|
|
|
160
162
|
Args:
|
|
161
163
|
name (str): A descriptive name for the span (e.g., "database_query",
|
|
162
164
|
"http_request").
|
|
163
|
-
span_type (
|
|
165
|
+
span_type (SpanType): The type of the span.
|
|
164
166
|
input (Optional[SpanInputParam], optional): A dictionary containing
|
|
165
167
|
input data or parameters relevant to this span's operation. Defaults to None.
|
|
166
168
|
output (Optional[SpanOutputParam], optional): A dictionary containing
|
|
@@ -56,6 +56,14 @@ from .questions import (
|
|
|
56
56
|
QuestionsResourceWithStreamingResponse,
|
|
57
57
|
AsyncQuestionsResourceWithStreamingResponse,
|
|
58
58
|
)
|
|
59
|
+
from .responses import (
|
|
60
|
+
ResponsesResource,
|
|
61
|
+
AsyncResponsesResource,
|
|
62
|
+
ResponsesResourceWithRawResponse,
|
|
63
|
+
AsyncResponsesResourceWithRawResponse,
|
|
64
|
+
ResponsesResourceWithStreamingResponse,
|
|
65
|
+
AsyncResponsesResourceWithStreamingResponse,
|
|
66
|
+
)
|
|
59
67
|
from .completions import (
|
|
60
68
|
CompletionsResource,
|
|
61
69
|
AsyncCompletionsResource,
|
|
@@ -90,6 +98,12 @@ from .evaluation_items import (
|
|
|
90
98
|
)
|
|
91
99
|
|
|
92
100
|
__all__ = [
|
|
101
|
+
"ResponsesResource",
|
|
102
|
+
"AsyncResponsesResource",
|
|
103
|
+
"ResponsesResourceWithRawResponse",
|
|
104
|
+
"AsyncResponsesResourceWithRawResponse",
|
|
105
|
+
"ResponsesResourceWithStreamingResponse",
|
|
106
|
+
"AsyncResponsesResourceWithStreamingResponse",
|
|
93
107
|
"CompletionsResource",
|
|
94
108
|
"AsyncCompletionsResource",
|
|
95
109
|
"CompletionsResourceWithRawResponse",
|