casedev 0.2.0__tar.gz → 0.3.0__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.
- casedev-0.3.0/.release-please-manifest.json +3 -0
- {casedev-0.2.0 → casedev-0.3.0}/CHANGELOG.md +13 -0
- {casedev-0.2.0 → casedev-0.3.0}/PKG-INFO +1 -1
- {casedev-0.2.0 → casedev-0.3.0}/pyproject.toml +1 -1
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_base_client.py +5 -2
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_compat.py +3 -3
- casedev-0.3.0/src/casedev/_utils/_json.py +35 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_version.py +1 -1
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/ocr/v1.py +2 -2
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/vault/objects.py +10 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/vault/vault.py +6 -4
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/voice/streaming.py +2 -2
- casedev-0.3.0/src/casedev/types/ocr/v1_process_params.py +54 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/ocr/v1_retrieve_response.py +7 -7
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/object_create_presigned_url_params.py +6 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/object_get_text_response.py +10 -10
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/object_list_response.py +13 -13
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/object_retrieve_response.py +13 -13
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_retrieve_response.py +13 -13
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_search_response.py +14 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_upload_params.py +5 -2
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/ocr/test_v1.py +6 -8
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/test_vault.py +2 -2
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/vault/test_objects.py +2 -0
- casedev-0.3.0/tests/test_utils/test_json.py +126 -0
- casedev-0.2.0/.release-please-manifest.json +0 -3
- casedev-0.2.0/src/casedev/types/ocr/v1_process_params.py +0 -46
- {casedev-0.2.0 → casedev-0.3.0}/.gitignore +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/CONTRIBUTING.md +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/LICENSE +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/README.md +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/SECURITY.md +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/api.md +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/bin/check-release-environment +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/bin/publish-pypi +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/examples/.keep +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/release-please-config.json +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/requirements-dev.lock +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_client.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_constants.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_exceptions.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_files.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_models.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_qs.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_resource.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_streaming.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_types.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_compat.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_datetime_parse.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_logs.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_proxy.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_reflection.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_resources_proxy.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_streams.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_sync.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_transform.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_typing.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/_utils/_utils.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/lib/.keep +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/py.typed +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/compute/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/compute/compute.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/compute/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/compute/v1/environments.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/compute/v1/secrets.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/compute/v1/v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/format/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/format/format.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/format/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/format/v1/templates.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/format/v1/v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/llm/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/llm/llm.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/llm/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/llm/v1/chat.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/llm/v1/v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/ocr/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/ocr/ocr.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/search/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/search/search.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/search/v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/vault/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/vault/graphrag.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/voice/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/voice/transcription.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/voice/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/voice/v1/speak.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/voice/v1/v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/resources/voice/voice.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/environment_create_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/environment_create_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/environment_delete_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/environment_list_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/environment_retrieve_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/environment_set_default_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_create_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_create_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_delete_group_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_delete_group_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_list_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_list_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_retrieve_group_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_retrieve_group_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_update_group_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1/secret_update_group_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1_get_usage_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/compute/v1_get_usage_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/v1/template_create_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/v1/template_create_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/v1/template_list_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/v1/template_list_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/v1/template_retrieve_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/format/v1_create_document_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm/v1/chat_create_completion_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm/v1/chat_create_completion_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm/v1_create_embedding_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm/v1_create_embedding_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm/v1_list_models_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/llm_get_config_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/ocr/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/ocr/v1_download_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/ocr/v1_process_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_answer_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_answer_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_contents_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_contents_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_research_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_research_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_retrieve_research_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_retrieve_research_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_search_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_search_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_similar_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/search/v1_similar_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/graphrag_get_stats_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/graphrag_init_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/object_create_presigned_url_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/object_download_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_create_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_create_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_ingest_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_list_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_search_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault_upload_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/streaming_get_url_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/transcription_create_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/transcription_create_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/transcription_retrieve_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/v1/speak_create_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/v1_list_voices_params.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/voice/v1_list_voices_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/webhooks/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/casedotdev_sdk_py/lib/.keep +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/src/router/lib/.keep +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/compute/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/compute/test_v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/compute/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/compute/v1/test_environments.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/compute/v1/test_secrets.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/format/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/format/test_v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/format/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/format/v1/test_templates.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/llm/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/llm/test_v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/llm/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/llm/v1/test_chat.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/ocr/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/search/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/search/test_v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/test_llm.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/vault/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/vault/test_graphrag.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/voice/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/voice/test_streaming.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/voice/test_transcription.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/voice/test_v1.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/voice/v1/__init__.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/api_resources/voice/v1/test_speak.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/conftest.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/sample_file.txt +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_client.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_deepcopy.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_extract_files.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_files.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_models.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_qs.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_required_args.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_response.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_streaming.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_transform.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_utils/test_proxy.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/test_utils/test_typing.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/tests/utils.py +0 -0
- {casedev-0.2.0 → casedev-0.3.0}/uv.lock +0 -0
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.0 (2026-01-31)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.2.0...v0.3.0](https://github.com/CaseMark/casedev-python/compare/v0.2.0...v0.3.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([9552466](https://github.com/CaseMark/casedev-python/commit/95524660fc8d6bc6b4afbd3e881bf15e7378cfe0))
|
|
10
|
+
* **api:** api update ([e3f5b6b](https://github.com/CaseMark/casedev-python/commit/e3f5b6bcc11924a87716cbb6e99d39e0c0603f74))
|
|
11
|
+
* **api:** api update ([ab9ad93](https://github.com/CaseMark/casedev-python/commit/ab9ad9365e44ec36f5ba3cb5c47436bcdcba095e))
|
|
12
|
+
* **api:** api update ([92d6d3e](https://github.com/CaseMark/casedev-python/commit/92d6d3e780ef1f21b3d5fb1839be1bb1973bdec9))
|
|
13
|
+
* **api:** api update ([c1ae1f0](https://github.com/CaseMark/casedev-python/commit/c1ae1f0f67d01c6131cea0a3cdfdd7b62430e57a))
|
|
14
|
+
* **client:** add custom JSON encoder for extended type support ([34a252e](https://github.com/CaseMark/casedev-python/commit/34a252ea9464e00bd27f8b12fcb027e283c095bd))
|
|
15
|
+
|
|
3
16
|
## 0.2.0 (2026-01-24)
|
|
4
17
|
|
|
5
18
|
Full Changelog: [v0.1.0...v0.2.0](https://github.com/CaseMark/casedev-python/compare/v0.1.0...v0.2.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: casedev
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: The official Python library for the casedev API
|
|
5
5
|
Project-URL: Homepage, https://github.com/CaseMark/casedev-python
|
|
6
6
|
Project-URL: Repository, https://github.com/CaseMark/casedev-python
|
|
@@ -86,6 +86,7 @@ from ._exceptions import (
|
|
|
86
86
|
APIConnectionError,
|
|
87
87
|
APIResponseValidationError,
|
|
88
88
|
)
|
|
89
|
+
from ._utils._json import openapi_dumps
|
|
89
90
|
|
|
90
91
|
log: logging.Logger = logging.getLogger(__name__)
|
|
91
92
|
|
|
@@ -554,8 +555,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
554
555
|
kwargs["content"] = options.content
|
|
555
556
|
elif isinstance(json_data, bytes):
|
|
556
557
|
kwargs["content"] = json_data
|
|
557
|
-
|
|
558
|
-
|
|
558
|
+
elif not files:
|
|
559
|
+
# Don't set content when JSON is sent as multipart/form-data,
|
|
560
|
+
# since httpx's content param overrides other body arguments
|
|
561
|
+
kwargs["content"] = openapi_dumps(json_data) if is_given(json_data) and json_data is not None else None
|
|
559
562
|
kwargs["files"] = files
|
|
560
563
|
else:
|
|
561
564
|
headers.pop("Content-Type", None)
|
|
@@ -139,6 +139,7 @@ def model_dump(
|
|
|
139
139
|
exclude_defaults: bool = False,
|
|
140
140
|
warnings: bool = True,
|
|
141
141
|
mode: Literal["json", "python"] = "python",
|
|
142
|
+
by_alias: bool | None = None,
|
|
142
143
|
) -> dict[str, Any]:
|
|
143
144
|
if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
|
|
144
145
|
return model.model_dump(
|
|
@@ -148,13 +149,12 @@ def model_dump(
|
|
|
148
149
|
exclude_defaults=exclude_defaults,
|
|
149
150
|
# warnings are not supported in Pydantic v1
|
|
150
151
|
warnings=True if PYDANTIC_V1 else warnings,
|
|
152
|
+
by_alias=by_alias,
|
|
151
153
|
)
|
|
152
154
|
return cast(
|
|
153
155
|
"dict[str, Any]",
|
|
154
156
|
model.dict( # pyright: ignore[reportDeprecated, reportUnnecessaryCast]
|
|
155
|
-
exclude=exclude,
|
|
156
|
-
exclude_unset=exclude_unset,
|
|
157
|
-
exclude_defaults=exclude_defaults,
|
|
157
|
+
exclude=exclude, exclude_unset=exclude_unset, exclude_defaults=exclude_defaults, by_alias=bool(by_alias)
|
|
158
158
|
),
|
|
159
159
|
)
|
|
160
160
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Any
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing_extensions import override
|
|
5
|
+
|
|
6
|
+
import pydantic
|
|
7
|
+
|
|
8
|
+
from .._compat import model_dump
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def openapi_dumps(obj: Any) -> bytes:
|
|
12
|
+
"""
|
|
13
|
+
Serialize an object to UTF-8 encoded JSON bytes.
|
|
14
|
+
|
|
15
|
+
Extends the standard json.dumps with support for additional types
|
|
16
|
+
commonly used in the SDK, such as `datetime`, `pydantic.BaseModel`, etc.
|
|
17
|
+
"""
|
|
18
|
+
return json.dumps(
|
|
19
|
+
obj,
|
|
20
|
+
cls=_CustomEncoder,
|
|
21
|
+
# Uses the same defaults as httpx's JSON serialization
|
|
22
|
+
ensure_ascii=False,
|
|
23
|
+
separators=(",", ":"),
|
|
24
|
+
allow_nan=False,
|
|
25
|
+
).encode()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class _CustomEncoder(json.JSONEncoder):
|
|
29
|
+
@override
|
|
30
|
+
def default(self, o: Any) -> Any:
|
|
31
|
+
if isinstance(o, datetime):
|
|
32
|
+
return o.isoformat()
|
|
33
|
+
if isinstance(o, pydantic.BaseModel):
|
|
34
|
+
return model_dump(o, exclude_unset=True, mode="json", by_alias=True)
|
|
35
|
+
return super().default(o)
|
|
@@ -149,7 +149,7 @@ class V1Resource(SyncAPIResource):
|
|
|
149
149
|
|
|
150
150
|
engine: OCR engine to use
|
|
151
151
|
|
|
152
|
-
features:
|
|
152
|
+
features: Additional processing options
|
|
153
153
|
|
|
154
154
|
result_bucket: S3 bucket to store results
|
|
155
155
|
|
|
@@ -309,7 +309,7 @@ class AsyncV1Resource(AsyncAPIResource):
|
|
|
309
309
|
|
|
310
310
|
engine: OCR engine to use
|
|
311
311
|
|
|
312
|
-
features:
|
|
312
|
+
features: Additional processing options
|
|
313
313
|
|
|
314
314
|
result_bucket: S3 bucket to store results
|
|
315
315
|
|
|
@@ -126,6 +126,7 @@ class ObjectsResource(SyncAPIResource):
|
|
|
126
126
|
content_type: str | Omit = omit,
|
|
127
127
|
expires_in: int | Omit = omit,
|
|
128
128
|
operation: Literal["GET", "PUT", "DELETE", "HEAD"] | Omit = omit,
|
|
129
|
+
size_bytes: int | Omit = omit,
|
|
129
130
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
130
131
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
131
132
|
extra_headers: Headers | None = None,
|
|
@@ -146,6 +147,9 @@ class ObjectsResource(SyncAPIResource):
|
|
|
146
147
|
|
|
147
148
|
operation: The S3 operation to generate URL for
|
|
148
149
|
|
|
150
|
+
size_bytes: File size in bytes (optional, max 500MB). When provided for PUT operations,
|
|
151
|
+
enforces exact file size at S3 level.
|
|
152
|
+
|
|
149
153
|
extra_headers: Send extra headers
|
|
150
154
|
|
|
151
155
|
extra_query: Add additional query parameters to the request
|
|
@@ -165,6 +169,7 @@ class ObjectsResource(SyncAPIResource):
|
|
|
165
169
|
"content_type": content_type,
|
|
166
170
|
"expires_in": expires_in,
|
|
167
171
|
"operation": operation,
|
|
172
|
+
"size_bytes": size_bytes,
|
|
168
173
|
},
|
|
169
174
|
object_create_presigned_url_params.ObjectCreatePresignedURLParams,
|
|
170
175
|
),
|
|
@@ -354,6 +359,7 @@ class AsyncObjectsResource(AsyncAPIResource):
|
|
|
354
359
|
content_type: str | Omit = omit,
|
|
355
360
|
expires_in: int | Omit = omit,
|
|
356
361
|
operation: Literal["GET", "PUT", "DELETE", "HEAD"] | Omit = omit,
|
|
362
|
+
size_bytes: int | Omit = omit,
|
|
357
363
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
358
364
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
359
365
|
extra_headers: Headers | None = None,
|
|
@@ -374,6 +380,9 @@ class AsyncObjectsResource(AsyncAPIResource):
|
|
|
374
380
|
|
|
375
381
|
operation: The S3 operation to generate URL for
|
|
376
382
|
|
|
383
|
+
size_bytes: File size in bytes (optional, max 500MB). When provided for PUT operations,
|
|
384
|
+
enforces exact file size at S3 level.
|
|
385
|
+
|
|
377
386
|
extra_headers: Send extra headers
|
|
378
387
|
|
|
379
388
|
extra_query: Add additional query parameters to the request
|
|
@@ -393,6 +402,7 @@ class AsyncObjectsResource(AsyncAPIResource):
|
|
|
393
402
|
"content_type": content_type,
|
|
394
403
|
"expires_in": expires_in,
|
|
395
404
|
"operation": operation,
|
|
405
|
+
"size_bytes": size_bytes,
|
|
396
406
|
},
|
|
397
407
|
object_create_presigned_url_params.ObjectCreatePresignedURLParams,
|
|
398
408
|
),
|
|
@@ -299,7 +299,7 @@ class VaultResource(SyncAPIResource):
|
|
|
299
299
|
auto_index: bool | Omit = omit,
|
|
300
300
|
metadata: object | Omit = omit,
|
|
301
301
|
path: str | Omit = omit,
|
|
302
|
-
size_bytes:
|
|
302
|
+
size_bytes: int | Omit = omit,
|
|
303
303
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
304
304
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
305
305
|
extra_headers: Headers | None = None,
|
|
@@ -326,7 +326,8 @@ class VaultResource(SyncAPIResource):
|
|
|
326
326
|
source folder structure from systems like NetDocs, Clio, or Smokeball. Example:
|
|
327
327
|
'/Discovery/Depositions/2024'
|
|
328
328
|
|
|
329
|
-
size_bytes:
|
|
329
|
+
size_bytes: File size in bytes (optional, max 500MB). When provided, enforces exact file
|
|
330
|
+
size at S3 level.
|
|
330
331
|
|
|
331
332
|
extra_headers: Send extra headers
|
|
332
333
|
|
|
@@ -613,7 +614,7 @@ class AsyncVaultResource(AsyncAPIResource):
|
|
|
613
614
|
auto_index: bool | Omit = omit,
|
|
614
615
|
metadata: object | Omit = omit,
|
|
615
616
|
path: str | Omit = omit,
|
|
616
|
-
size_bytes:
|
|
617
|
+
size_bytes: int | Omit = omit,
|
|
617
618
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
618
619
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
619
620
|
extra_headers: Headers | None = None,
|
|
@@ -640,7 +641,8 @@ class AsyncVaultResource(AsyncAPIResource):
|
|
|
640
641
|
source folder structure from systems like NetDocs, Clio, or Smokeball. Example:
|
|
641
642
|
'/Discovery/Depositions/2024'
|
|
642
643
|
|
|
643
|
-
size_bytes:
|
|
644
|
+
size_bytes: File size in bytes (optional, max 500MB). When provided, enforces exact file
|
|
645
|
+
size at S3 level.
|
|
644
646
|
|
|
645
647
|
extra_headers: Send extra headers
|
|
646
648
|
|
|
@@ -60,7 +60,7 @@ class StreamingResource(SyncAPIResource):
|
|
|
60
60
|
- Encoding: PCM 16-bit little-endian
|
|
61
61
|
- Channels: Mono (1 channel)
|
|
62
62
|
|
|
63
|
-
**Pricing:** $0.
|
|
63
|
+
**Pricing:** $0.01 per minute ($0.60 per hour)
|
|
64
64
|
"""
|
|
65
65
|
return self._get(
|
|
66
66
|
"/voice/streaming/url",
|
|
@@ -112,7 +112,7 @@ class AsyncStreamingResource(AsyncAPIResource):
|
|
|
112
112
|
- Encoding: PCM 16-bit little-endian
|
|
113
113
|
- Channels: Mono (1 channel)
|
|
114
114
|
|
|
115
|
-
**Pricing:** $0.
|
|
115
|
+
**Pricing:** $0.01 per minute ($0.60 per hour)
|
|
116
116
|
"""
|
|
117
117
|
return await self._get(
|
|
118
118
|
"/voice/streaming/url",
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Dict, Union
|
|
6
|
+
from typing_extensions import Literal, Required, TypeAlias, TypedDict
|
|
7
|
+
|
|
8
|
+
__all__ = ["V1ProcessParams", "Features", "FeaturesTables"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class V1ProcessParams(TypedDict, total=False):
|
|
12
|
+
document_url: Required[str]
|
|
13
|
+
"""URL or S3 path to the document to process"""
|
|
14
|
+
|
|
15
|
+
callback_url: str
|
|
16
|
+
"""URL to receive completion webhook"""
|
|
17
|
+
|
|
18
|
+
document_id: str
|
|
19
|
+
"""Optional custom document identifier"""
|
|
20
|
+
|
|
21
|
+
engine: Literal["doctr", "paddleocr"]
|
|
22
|
+
"""OCR engine to use"""
|
|
23
|
+
|
|
24
|
+
features: Features
|
|
25
|
+
"""Additional processing options"""
|
|
26
|
+
|
|
27
|
+
result_bucket: str
|
|
28
|
+
"""S3 bucket to store results"""
|
|
29
|
+
|
|
30
|
+
result_prefix: str
|
|
31
|
+
"""S3 key prefix for results"""
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class FeaturesTablesTyped(TypedDict, total=False):
|
|
35
|
+
"""Extract tables as structured data"""
|
|
36
|
+
|
|
37
|
+
format: Literal["csv", "json"]
|
|
38
|
+
"""Output format for extracted tables"""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
FeaturesTables: TypeAlias = Union[FeaturesTablesTyped, Dict[str, object]]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class Features(TypedDict, total=False):
|
|
45
|
+
"""Additional processing options"""
|
|
46
|
+
|
|
47
|
+
embed: Dict[str, object]
|
|
48
|
+
"""Generate searchable PDF with text layer"""
|
|
49
|
+
|
|
50
|
+
forms: Dict[str, object]
|
|
51
|
+
"""Detect and extract form fields"""
|
|
52
|
+
|
|
53
|
+
tables: FeaturesTables
|
|
54
|
+
"""Extract tables as structured data"""
|
|
@@ -10,23 +10,23 @@ __all__ = ["V1RetrieveResponse"]
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class V1RetrieveResponse(BaseModel):
|
|
13
|
-
id:
|
|
13
|
+
id: str
|
|
14
14
|
"""OCR job ID"""
|
|
15
15
|
|
|
16
|
+
created_at: datetime
|
|
17
|
+
"""Job creation timestamp"""
|
|
18
|
+
|
|
19
|
+
status: Literal["pending", "processing", "completed", "failed"]
|
|
20
|
+
"""Current job status"""
|
|
21
|
+
|
|
16
22
|
completed_at: Optional[datetime] = None
|
|
17
23
|
"""Job completion timestamp"""
|
|
18
24
|
|
|
19
|
-
created_at: Optional[datetime] = None
|
|
20
|
-
"""Job creation timestamp"""
|
|
21
|
-
|
|
22
25
|
metadata: Optional[object] = None
|
|
23
26
|
"""Additional processing metadata"""
|
|
24
27
|
|
|
25
28
|
page_count: Optional[int] = None
|
|
26
29
|
"""Number of pages processed"""
|
|
27
30
|
|
|
28
|
-
status: Optional[Literal["pending", "processing", "completed", "failed"]] = None
|
|
29
|
-
"""Current job status"""
|
|
30
|
-
|
|
31
31
|
text: Optional[str] = None
|
|
32
32
|
"""Extracted text content (when completed)"""
|
{casedev-0.2.0 → casedev-0.3.0}/src/casedev/types/vault/object_create_presigned_url_params.py
RENAMED
|
@@ -20,3 +20,9 @@ class ObjectCreatePresignedURLParams(TypedDict, total=False):
|
|
|
20
20
|
|
|
21
21
|
operation: Literal["GET", "PUT", "DELETE", "HEAD"]
|
|
22
22
|
"""The S3 operation to generate URL for"""
|
|
23
|
+
|
|
24
|
+
size_bytes: Annotated[int, PropertyInfo(alias="sizeBytes")]
|
|
25
|
+
"""File size in bytes (optional, max 500MB).
|
|
26
|
+
|
|
27
|
+
When provided for PUT operations, enforces exact file size at S3 level.
|
|
28
|
+
"""
|
|
@@ -9,27 +9,27 @@ __all__ = ["ObjectGetTextResponse", "Metadata"]
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class Metadata(BaseModel):
|
|
12
|
-
chunk_count:
|
|
12
|
+
chunk_count: int
|
|
13
13
|
"""Number of text chunks the document was split into"""
|
|
14
14
|
|
|
15
|
-
filename:
|
|
15
|
+
filename: str
|
|
16
16
|
"""Original filename of the document"""
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
"""When the document processing completed"""
|
|
20
|
-
|
|
21
|
-
length: Optional[int] = None
|
|
18
|
+
length: int
|
|
22
19
|
"""Total character count of the extracted text"""
|
|
23
20
|
|
|
24
|
-
object_id:
|
|
21
|
+
object_id: str
|
|
25
22
|
"""The object ID"""
|
|
26
23
|
|
|
27
|
-
vault_id:
|
|
24
|
+
vault_id: str
|
|
28
25
|
"""The vault ID"""
|
|
29
26
|
|
|
27
|
+
ingestion_completed_at: Optional[datetime] = None
|
|
28
|
+
"""When the document processing completed"""
|
|
29
|
+
|
|
30
30
|
|
|
31
31
|
class ObjectGetTextResponse(BaseModel):
|
|
32
|
-
metadata:
|
|
32
|
+
metadata: Metadata
|
|
33
33
|
|
|
34
|
-
text:
|
|
34
|
+
text: str
|
|
35
35
|
"""Full concatenated text content from all chunks"""
|
|
@@ -11,27 +11,27 @@ __all__ = ["ObjectListResponse", "Object"]
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class Object(BaseModel):
|
|
14
|
-
id:
|
|
14
|
+
id: str
|
|
15
15
|
"""Unique object identifier"""
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
"""Number of text chunks created for vectorization"""
|
|
19
|
-
|
|
20
|
-
content_type: Optional[str] = FieldInfo(alias="contentType", default=None)
|
|
17
|
+
content_type: str = FieldInfo(alias="contentType")
|
|
21
18
|
"""MIME type of the document"""
|
|
22
19
|
|
|
23
|
-
created_at:
|
|
20
|
+
created_at: datetime = FieldInfo(alias="createdAt")
|
|
24
21
|
"""Document upload timestamp"""
|
|
25
22
|
|
|
26
|
-
filename:
|
|
23
|
+
filename: str
|
|
27
24
|
"""Original filename of the uploaded document"""
|
|
28
25
|
|
|
26
|
+
ingestion_status: str = FieldInfo(alias="ingestionStatus")
|
|
27
|
+
"""Processing status of the document"""
|
|
28
|
+
|
|
29
|
+
chunk_count: Optional[float] = FieldInfo(alias="chunkCount", default=None)
|
|
30
|
+
"""Number of text chunks created for vectorization"""
|
|
31
|
+
|
|
29
32
|
ingestion_completed_at: Optional[datetime] = FieldInfo(alias="ingestionCompletedAt", default=None)
|
|
30
33
|
"""Processing completion timestamp"""
|
|
31
34
|
|
|
32
|
-
ingestion_status: Optional[str] = FieldInfo(alias="ingestionStatus", default=None)
|
|
33
|
-
"""Processing status of the document"""
|
|
34
|
-
|
|
35
35
|
metadata: Optional[object] = None
|
|
36
36
|
"""Custom metadata associated with the document"""
|
|
37
37
|
|
|
@@ -55,10 +55,10 @@ class Object(BaseModel):
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
class ObjectListResponse(BaseModel):
|
|
58
|
-
count:
|
|
58
|
+
count: float
|
|
59
59
|
"""Total number of objects in the vault"""
|
|
60
60
|
|
|
61
|
-
objects:
|
|
61
|
+
objects: List[Object]
|
|
62
62
|
|
|
63
|
-
vault_id:
|
|
63
|
+
vault_id: str = FieldInfo(alias="vaultId")
|
|
64
64
|
"""The ID of the vault"""
|
|
@@ -11,30 +11,33 @@ __all__ = ["ObjectRetrieveResponse"]
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class ObjectRetrieveResponse(BaseModel):
|
|
14
|
-
id:
|
|
14
|
+
id: str
|
|
15
15
|
"""Object ID"""
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
"""Number of text chunks created"""
|
|
19
|
-
|
|
20
|
-
content_type: Optional[str] = FieldInfo(alias="contentType", default=None)
|
|
17
|
+
content_type: str = FieldInfo(alias="contentType")
|
|
21
18
|
"""MIME type"""
|
|
22
19
|
|
|
23
|
-
created_at:
|
|
20
|
+
created_at: datetime = FieldInfo(alias="createdAt")
|
|
24
21
|
"""Upload timestamp"""
|
|
25
22
|
|
|
26
|
-
download_url:
|
|
23
|
+
download_url: str = FieldInfo(alias="downloadUrl")
|
|
27
24
|
"""Presigned S3 download URL"""
|
|
28
25
|
|
|
29
|
-
expires_in:
|
|
26
|
+
expires_in: int = FieldInfo(alias="expiresIn")
|
|
30
27
|
"""URL expiration time in seconds"""
|
|
31
28
|
|
|
32
|
-
filename:
|
|
29
|
+
filename: str
|
|
33
30
|
"""Original filename"""
|
|
34
31
|
|
|
35
|
-
ingestion_status:
|
|
32
|
+
ingestion_status: str = FieldInfo(alias="ingestionStatus")
|
|
36
33
|
"""Processing status (pending, processing, completed, failed)"""
|
|
37
34
|
|
|
35
|
+
vault_id: str = FieldInfo(alias="vaultId")
|
|
36
|
+
"""Vault ID"""
|
|
37
|
+
|
|
38
|
+
chunk_count: Optional[int] = FieldInfo(alias="chunkCount", default=None)
|
|
39
|
+
"""Number of text chunks created"""
|
|
40
|
+
|
|
38
41
|
metadata: Optional[object] = None
|
|
39
42
|
"""Additional metadata"""
|
|
40
43
|
|
|
@@ -50,8 +53,5 @@ class ObjectRetrieveResponse(BaseModel):
|
|
|
50
53
|
text_length: Optional[int] = FieldInfo(alias="textLength", default=None)
|
|
51
54
|
"""Length of extracted text"""
|
|
52
55
|
|
|
53
|
-
vault_id: Optional[str] = FieldInfo(alias="vaultId", default=None)
|
|
54
|
-
"""Vault ID"""
|
|
55
|
-
|
|
56
56
|
vector_count: Optional[int] = FieldInfo(alias="vectorCount", default=None)
|
|
57
57
|
"""Number of embedding vectors generated"""
|
|
@@ -27,24 +27,30 @@ class ChunkStrategy(BaseModel):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class VaultRetrieveResponse(BaseModel):
|
|
30
|
-
id:
|
|
30
|
+
id: str
|
|
31
31
|
"""Vault identifier"""
|
|
32
32
|
|
|
33
|
+
created_at: datetime = FieldInfo(alias="createdAt")
|
|
34
|
+
"""Vault creation timestamp"""
|
|
35
|
+
|
|
36
|
+
files_bucket: str = FieldInfo(alias="filesBucket")
|
|
37
|
+
"""S3 bucket for document storage"""
|
|
38
|
+
|
|
39
|
+
name: str
|
|
40
|
+
"""Vault name"""
|
|
41
|
+
|
|
42
|
+
region: str
|
|
43
|
+
"""AWS region"""
|
|
44
|
+
|
|
33
45
|
chunk_strategy: Optional[ChunkStrategy] = FieldInfo(alias="chunkStrategy", default=None)
|
|
34
46
|
"""Document chunking strategy configuration"""
|
|
35
47
|
|
|
36
|
-
created_at: Optional[datetime] = FieldInfo(alias="createdAt", default=None)
|
|
37
|
-
"""Vault creation timestamp"""
|
|
38
|
-
|
|
39
48
|
description: Optional[str] = None
|
|
40
49
|
"""Vault description"""
|
|
41
50
|
|
|
42
51
|
enable_graph: Optional[bool] = FieldInfo(alias="enableGraph", default=None)
|
|
43
52
|
"""Whether GraphRAG is enabled"""
|
|
44
53
|
|
|
45
|
-
files_bucket: Optional[str] = FieldInfo(alias="filesBucket", default=None)
|
|
46
|
-
"""S3 bucket for document storage"""
|
|
47
|
-
|
|
48
54
|
index_name: Optional[str] = FieldInfo(alias="indexName", default=None)
|
|
49
55
|
"""Search index name"""
|
|
50
56
|
|
|
@@ -54,12 +60,6 @@ class VaultRetrieveResponse(BaseModel):
|
|
|
54
60
|
metadata: Optional[object] = None
|
|
55
61
|
"""Additional vault metadata"""
|
|
56
62
|
|
|
57
|
-
name: Optional[str] = None
|
|
58
|
-
"""Vault name"""
|
|
59
|
-
|
|
60
|
-
region: Optional[str] = None
|
|
61
|
-
"""AWS region"""
|
|
62
|
-
|
|
63
63
|
total_bytes: Optional[int] = FieldInfo(alias="totalBytes", default=None)
|
|
64
64
|
"""Total storage size in bytes"""
|
|
65
65
|
|
|
@@ -41,6 +41,20 @@ class Chunk(BaseModel):
|
|
|
41
41
|
text: Optional[str] = None
|
|
42
42
|
"""Preview of the chunk text (up to 500 characters)"""
|
|
43
43
|
|
|
44
|
+
word_end_index: Optional[int] = None
|
|
45
|
+
"""Ending word index (0-based) in the OCR word list.
|
|
46
|
+
|
|
47
|
+
Use with GET /vault/:id/objects/:objectId/ocr-words to retrieve bounding boxes
|
|
48
|
+
for highlighting.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
word_start_index: Optional[int] = None
|
|
52
|
+
"""Starting word index (0-based) in the OCR word list.
|
|
53
|
+
|
|
54
|
+
Use with GET /vault/:id/objects/:objectId/ocr-words to retrieve bounding boxes
|
|
55
|
+
for highlighting.
|
|
56
|
+
"""
|
|
57
|
+
|
|
44
58
|
|
|
45
59
|
class Source(BaseModel):
|
|
46
60
|
id: Optional[str] = None
|
|
@@ -29,5 +29,8 @@ class VaultUploadParams(TypedDict, total=False):
|
|
|
29
29
|
NetDocs, Clio, or Smokeball. Example: '/Discovery/Depositions/2024'
|
|
30
30
|
"""
|
|
31
31
|
|
|
32
|
-
size_bytes: Annotated[
|
|
33
|
-
"""
|
|
32
|
+
size_bytes: Annotated[int, PropertyInfo(alias="sizeBytes")]
|
|
33
|
+
"""File size in bytes (optional, max 500MB).
|
|
34
|
+
|
|
35
|
+
When provided, enforces exact file size at S3 level.
|
|
36
|
+
"""
|
|
@@ -122,10 +122,9 @@ class TestV1:
|
|
|
122
122
|
document_id="contract-2024-001",
|
|
123
123
|
engine="doctr",
|
|
124
124
|
features={
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"tables":
|
|
128
|
-
"text": True,
|
|
125
|
+
"embed": {},
|
|
126
|
+
"forms": {"foo": "bar"},
|
|
127
|
+
"tables": {"format": "csv"},
|
|
129
128
|
},
|
|
130
129
|
result_bucket="my-ocr-results",
|
|
131
130
|
result_prefix="ocr/2024/",
|
|
@@ -269,10 +268,9 @@ class TestAsyncV1:
|
|
|
269
268
|
document_id="contract-2024-001",
|
|
270
269
|
engine="doctr",
|
|
271
270
|
features={
|
|
272
|
-
"
|
|
273
|
-
"
|
|
274
|
-
"tables":
|
|
275
|
-
"text": True,
|
|
271
|
+
"embed": {},
|
|
272
|
+
"forms": {"foo": "bar"},
|
|
273
|
+
"tables": {"format": "csv"},
|
|
276
274
|
},
|
|
277
275
|
result_bucket="my-ocr-results",
|
|
278
276
|
result_prefix="ocr/2024/",
|
|
@@ -273,7 +273,7 @@ class TestVault:
|
|
|
273
273
|
auto_index=True,
|
|
274
274
|
metadata={},
|
|
275
275
|
path="path",
|
|
276
|
-
size_bytes=
|
|
276
|
+
size_bytes=1,
|
|
277
277
|
)
|
|
278
278
|
assert_matches_type(VaultUploadResponse, vault, path=["response"])
|
|
279
279
|
|
|
@@ -572,7 +572,7 @@ class TestAsyncVault:
|
|
|
572
572
|
auto_index=True,
|
|
573
573
|
metadata={},
|
|
574
574
|
path="path",
|
|
575
|
-
size_bytes=
|
|
575
|
+
size_bytes=1,
|
|
576
576
|
)
|
|
577
577
|
assert_matches_type(VaultUploadResponse, vault, path=["response"])
|
|
578
578
|
|
|
@@ -134,6 +134,7 @@ class TestObjects:
|
|
|
134
134
|
content_type="contentType",
|
|
135
135
|
expires_in=60,
|
|
136
136
|
operation="GET",
|
|
137
|
+
size_bytes=1,
|
|
137
138
|
)
|
|
138
139
|
assert_matches_type(ObjectCreatePresignedURLResponse, object_, path=["response"])
|
|
139
140
|
|
|
@@ -402,6 +403,7 @@ class TestAsyncObjects:
|
|
|
402
403
|
content_type="contentType",
|
|
403
404
|
expires_in=60,
|
|
404
405
|
operation="GET",
|
|
406
|
+
size_bytes=1,
|
|
405
407
|
)
|
|
406
408
|
assert_matches_type(ObjectCreatePresignedURLResponse, object_, path=["response"])
|
|
407
409
|
|