ragwell 0.1.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.
Files changed (187) hide show
  1. ragwell-0.1.0/.gitignore +22 -0
  2. ragwell-0.1.0/AGENTS.md +23 -0
  3. ragwell-0.1.0/CHANGELOG.md +25 -0
  4. ragwell-0.1.0/CONTRIBUTING.md +65 -0
  5. ragwell-0.1.0/LICENSE +21 -0
  6. ragwell-0.1.0/PKG-INFO +179 -0
  7. ragwell-0.1.0/README.md +156 -0
  8. ragwell-0.1.0/SECURITY.md +30 -0
  9. ragwell-0.1.0/contracts/2026-09-19.1/manifest.json +140 -0
  10. ragwell-0.1.0/contracts/2026-09-19.1/openapi.json +8778 -0
  11. ragwell-0.1.0/contracts/README.md +27 -0
  12. ragwell-0.1.0/contracts/operations.json +32 -0
  13. ragwell-0.1.0/docs/api-reference.md +191 -0
  14. ragwell-0.1.0/docs/beta-validation.md +100 -0
  15. ragwell-0.1.0/docs/compatibility.md +58 -0
  16. ragwell-0.1.0/docs/generation.md +50 -0
  17. ragwell-0.1.0/docs/http-qualification.md +110 -0
  18. ragwell-0.1.0/docs/local-qualification.md +218 -0
  19. ragwell-0.1.0/docs/qualification/2026-09-21-beta-lifecycle.json +99 -0
  20. ragwell-0.1.0/docs/qualification/2026-09-21-dependency-audit.json +1 -0
  21. ragwell-0.1.0/docs/qualification/2026-09-21-local-http.json +440 -0
  22. ragwell-0.1.0/docs/qualification/2026-09-21-release-preparation.json +155 -0
  23. ragwell-0.1.0/docs/qualification/2026-09-21-runtime-licenses.json +85 -0
  24. ragwell-0.1.0/docs/qualification/2026-09-21-secret-scan-policy.toml +8 -0
  25. ragwell-0.1.0/docs/qualification/2026-09-22-dependency-audit.json +1 -0
  26. ragwell-0.1.0/docs/qualification/2026-09-22-hosted-ci.json +26 -0
  27. ragwell-0.1.0/docs/qualification/2026-09-22-release-candidate.json +69 -0
  28. ragwell-0.1.0/docs/qualification-fixtures.md +84 -0
  29. ragwell-0.1.0/docs/releasing.md +89 -0
  30. ragwell-0.1.0/docs/reliability.md +68 -0
  31. ragwell-0.1.0/examples/__init__.py +1 -0
  32. ragwell-0.1.0/examples/async_lifecycle.py +69 -0
  33. ragwell-0.1.0/examples/async_search.py +26 -0
  34. ragwell-0.1.0/examples/sync_lifecycle.py +66 -0
  35. ragwell-0.1.0/examples/sync_search.py +23 -0
  36. ragwell-0.1.0/openapi-python-client.yaml +11 -0
  37. ragwell-0.1.0/pyproject.toml +93 -0
  38. ragwell-0.1.0/qualification/beta_runner.py +470 -0
  39. ragwell-0.1.0/qualification/evidence.py +216 -0
  40. ragwell-0.1.0/qualification/http_runner.py +712 -0
  41. ragwell-0.1.0/scripts/generate.py +142 -0
  42. ragwell-0.1.0/src/ragwell/__init__.py +50 -0
  43. ragwell-0.1.0/src/ragwell/_common.py +393 -0
  44. ragwell-0.1.0/src/ragwell/_deadline.py +78 -0
  45. ragwell-0.1.0/src/ragwell/_decoding.py +61 -0
  46. ragwell-0.1.0/src/ragwell/_generated/__init__.py +8 -0
  47. ragwell-0.1.0/src/ragwell/_generated/api/__init__.py +1 -0
  48. ragwell-0.1.0/src/ragwell/_generated/api/document_deletion/__init__.py +1 -0
  49. ragwell-0.1.0/src/ragwell/_generated/api/document_deletion/delete_document_v1_projects_project_id_documents_document_id_delete.py +228 -0
  50. ragwell-0.1.0/src/ragwell/_generated/api/document_deletion/get_document_deletion_v1_projects_project_id_document_deletions_receipt_id_get.py +201 -0
  51. ragwell-0.1.0/src/ragwell/_generated/api/document_deletion/retry_document_deletion_v1_projects_project_id_document_deletions_receipt_id_retry_post.py +233 -0
  52. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/__init__.py +1 -0
  53. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/create_document_export_v1_projects_project_id_documents_document_id_exports_post.py +246 -0
  54. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/download_document_export_part_v1_projects_project_id_documents_document_id_exports_export_id_parts_part_number_get.py +239 -0
  55. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/get_document_activity_v1_projects_project_id_documents_document_id_activity_get.py +234 -0
  56. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/get_document_export_v1_projects_project_id_documents_document_id_exports_export_id_get.py +220 -0
  57. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/inspect_document_source_v1_projects_project_id_documents_document_id_generations_generation_id_sources_source_id_get.py +275 -0
  58. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/inspect_document_v1_projects_project_id_documents_document_id_inspection_get.py +234 -0
  59. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/list_document_chunks_v1_projects_project_id_documents_document_id_generations_generation_id_chunks_get.py +306 -0
  60. ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/list_document_generations_v1_projects_project_id_documents_document_id_generations_get.py +249 -0
  61. ragwell-0.1.0/src/ragwell/_generated/api/documents/__init__.py +1 -0
  62. ragwell-0.1.0/src/ragwell/_generated/api/documents/create_upload_v1_projects_project_id_uploads_post.py +273 -0
  63. ragwell-0.1.0/src/ragwell/_generated/api/documents/finalize_upload_v1_projects_project_id_uploads_upload_id_finalize_post.py +211 -0
  64. ragwell-0.1.0/src/ragwell/_generated/api/documents/get_document_upload_policy_v1_document_upload_policy_get.py +144 -0
  65. ragwell-0.1.0/src/ragwell/_generated/api/documents/get_document_v1_projects_project_id_documents_document_id_get.py +201 -0
  66. ragwell-0.1.0/src/ragwell/_generated/api/documents/get_upload_state.py +206 -0
  67. ragwell-0.1.0/src/ragwell/_generated/api/documents/list_documents_v1_projects_project_id_documents_get.py +366 -0
  68. ragwell-0.1.0/src/ragwell/_generated/api/documents/replace_document_metadata_v1_projects_project_id_documents_document_id_metadata_put.py +251 -0
  69. ragwell-0.1.0/src/ragwell/_generated/api/documents/upload_content_v1_projects_project_id_uploads_upload_id_content_put.py +281 -0
  70. ragwell-0.1.0/src/ragwell/_generated/api/embedding_connections/__init__.py +1 -0
  71. ragwell-0.1.0/src/ragwell/_generated/api/embedding_connections/inspect_embedding_connection_v1_projects_project_id_embedding_connection_get.py +192 -0
  72. ragwell-0.1.0/src/ragwell/_generated/api/ingestion/__init__.py +1 -0
  73. ragwell-0.1.0/src/ragwell/_generated/api/ingestion/cancel_job_v1_projects_project_id_jobs_job_id_cancel_post.py +233 -0
  74. ragwell-0.1.0/src/ragwell/_generated/api/ingestion/get_job_v1_projects_project_id_jobs_job_id_get.py +201 -0
  75. ragwell-0.1.0/src/ragwell/_generated/api/ingestion/list_jobs_v1_projects_project_id_jobs_get.py +387 -0
  76. ragwell-0.1.0/src/ragwell/_generated/api/ingestion/retry_job_v1_projects_project_id_jobs_job_id_retry_post.py +233 -0
  77. ragwell-0.1.0/src/ragwell/_generated/api/projects/__init__.py +1 -0
  78. ragwell-0.1.0/src/ragwell/_generated/api/projects/get_project_v1_projects_project_id_get.py +187 -0
  79. ragwell-0.1.0/src/ragwell/_generated/api/retrieval/__init__.py +1 -0
  80. ragwell-0.1.0/src/ragwell/_generated/api/retrieval/search_v1_projects_project_id_search_post.py +235 -0
  81. ragwell-0.1.0/src/ragwell/_generated/client.py +274 -0
  82. ragwell-0.1.0/src/ragwell/_generated/errors.py +16 -0
  83. ragwell-0.1.0/src/ragwell/_generated/models/__init__.py +191 -0
  84. ragwell-0.1.0/src/ragwell/_generated/models/accepted_document_format_response.py +96 -0
  85. ragwell-0.1.0/src/ragwell/_generated/models/accepted_document_format_response_media_type.py +10 -0
  86. ragwell-0.1.0/src/ragwell/_generated/models/attempt_status.py +11 -0
  87. ragwell-0.1.0/src/ragwell/_generated/models/chunk_part.py +171 -0
  88. ragwell-0.1.0/src/ragwell/_generated/models/chunk_part_kind.py +10 -0
  89. ragwell-0.1.0/src/ragwell/_generated/models/chunk_stage_progress.py +53 -0
  90. ragwell-0.1.0/src/ragwell/_generated/models/chunk_stage_progress_phase.py +9 -0
  91. ragwell-0.1.0/src/ragwell/_generated/models/command_acceptance.py +121 -0
  92. ragwell-0.1.0/src/ragwell/_generated/models/command_acceptance_operation.py +12 -0
  93. ragwell-0.1.0/src/ragwell/_generated/models/create_document_export_request.py +48 -0
  94. ragwell-0.1.0/src/ragwell/_generated/models/create_upload_request.py +96 -0
  95. ragwell-0.1.0/src/ragwell/_generated/models/create_upload_request_declared_media_type.py +10 -0
  96. ragwell-0.1.0/src/ragwell/_generated/models/document_annotation_field_response.py +81 -0
  97. ragwell-0.1.0/src/ragwell/_generated/models/document_annotation_field_response_key.py +11 -0
  98. ragwell-0.1.0/src/ragwell/_generated/models/document_annotation_policy_response.py +116 -0
  99. ragwell-0.1.0/src/ragwell/_generated/models/document_chunk_activity.py +78 -0
  100. ragwell-0.1.0/src/ragwell/_generated/models/document_chunk_info.py +228 -0
  101. ragwell-0.1.0/src/ragwell/_generated/models/document_chunk_page.py +105 -0
  102. ragwell-0.1.0/src/ragwell/_generated/models/document_deletion_response.py +268 -0
  103. ragwell-0.1.0/src/ragwell/_generated/models/document_deletion_state.py +12 -0
  104. ragwell-0.1.0/src/ragwell/_generated/models/document_embedding_usage.py +227 -0
  105. ragwell-0.1.0/src/ragwell/_generated/models/document_embedding_usage_totals.py +152 -0
  106. ragwell-0.1.0/src/ragwell/_generated/models/document_export_part_response.py +70 -0
  107. ragwell-0.1.0/src/ragwell/_generated/models/document_export_response.py +205 -0
  108. ragwell-0.1.0/src/ragwell/_generated/models/document_export_response_state.py +12 -0
  109. ragwell-0.1.0/src/ragwell/_generated/models/document_format.py +10 -0
  110. ragwell-0.1.0/src/ragwell/_generated/models/document_generation_info.py +260 -0
  111. ragwell-0.1.0/src/ragwell/_generated/models/document_generation_page.py +95 -0
  112. ragwell-0.1.0/src/ragwell/_generated/models/document_inspection_response.py +325 -0
  113. ragwell-0.1.0/src/ragwell/_generated/models/document_job_info.py +275 -0
  114. ragwell-0.1.0/src/ragwell/_generated/models/document_list_response.py +95 -0
  115. ragwell-0.1.0/src/ragwell/_generated/models/document_metadata_input.py +106 -0
  116. ragwell-0.1.0/src/ragwell/_generated/models/document_metadata_response.py +102 -0
  117. ragwell-0.1.0/src/ragwell/_generated/models/document_profile_info.py +174 -0
  118. ragwell-0.1.0/src/ragwell/_generated/models/document_response.py +158 -0
  119. ragwell-0.1.0/src/ragwell/_generated/models/document_retrieval_activity.py +156 -0
  120. ragwell-0.1.0/src/ragwell/_generated/models/document_source_info.py +102 -0
  121. ragwell-0.1.0/src/ragwell/_generated/models/document_source_preview.py +161 -0
  122. ragwell-0.1.0/src/ragwell/_generated/models/document_stage_attempt.py +133 -0
  123. ragwell-0.1.0/src/ragwell/_generated/models/document_state.py +12 -0
  124. ragwell-0.1.0/src/ragwell/_generated/models/document_upload_policy_response.py +94 -0
  125. ragwell-0.1.0/src/ragwell/_generated/models/document_version_response.py +109 -0
  126. ragwell-0.1.0/src/ragwell/_generated/models/document_version_state.py +11 -0
  127. ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_notice_response.py +124 -0
  128. ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_notice_response_lane.py +9 -0
  129. ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_notice_response_state.py +9 -0
  130. ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response.py +196 -0
  131. ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response_funding_source.py +9 -0
  132. ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response_health.py +10 -0
  133. ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response_status.py +11 -0
  134. ragwell-0.1.0/src/ragwell/_generated/models/embedding_serialization.py +65 -0
  135. ragwell-0.1.0/src/ragwell/_generated/models/error_detail.py +91 -0
  136. ragwell-0.1.0/src/ragwell/_generated/models/error_response.py +62 -0
  137. ragwell-0.1.0/src/ragwell/_generated/models/field_error.py +70 -0
  138. ragwell-0.1.0/src/ragwell/_generated/models/finalized_intake_response.py +88 -0
  139. ragwell-0.1.0/src/ragwell/_generated/models/index_generation_status.py +10 -0
  140. ragwell-0.1.0/src/ragwell/_generated/models/ingestion_job_list_response.py +83 -0
  141. ragwell-0.1.0/src/ragwell/_generated/models/ingestion_job_response.py +318 -0
  142. ragwell-0.1.0/src/ragwell/_generated/models/ingestion_job_status.py +14 -0
  143. ragwell-0.1.0/src/ragwell/_generated/models/ingestion_stage.py +13 -0
  144. ragwell-0.1.0/src/ragwell/_generated/models/limit_key.py +13 -0
  145. ragwell-0.1.0/src/ragwell/_generated/models/limit_unit.py +12 -0
  146. ragwell-0.1.0/src/ragwell/_generated/models/plan_limit_error_detail.py +178 -0
  147. ragwell-0.1.0/src/ragwell/_generated/models/plan_limit_error_detail_code.py +9 -0
  148. ragwell-0.1.0/src/ragwell/_generated/models/plan_limit_error_response.py +62 -0
  149. ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_editability_response.py +99 -0
  150. ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_editability_response_reason_code_type_0.py +9 -0
  151. ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_summary_response.py +153 -0
  152. ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_technical_response.py +174 -0
  153. ragwell-0.1.0/src/ragwell/_generated/models/processing_service_class_id.py +10 -0
  154. ragwell-0.1.0/src/ragwell/_generated/models/processing_service_class_response.py +72 -0
  155. ragwell-0.1.0/src/ragwell/_generated/models/project_response.py +126 -0
  156. ragwell-0.1.0/src/ragwell/_generated/models/replace_document_metadata_request.py +57 -0
  157. ragwell-0.1.0/src/ragwell/_generated/models/retrieval_citation_response.py +91 -0
  158. ragwell-0.1.0/src/ragwell/_generated/models/retrieval_item_response.py +178 -0
  159. ragwell-0.1.0/src/ragwell/_generated/models/retrieval_scores_response.py +82 -0
  160. ragwell-0.1.0/src/ragwell/_generated/models/search_filters.py +110 -0
  161. ragwell-0.1.0/src/ragwell/_generated/models/search_request.py +84 -0
  162. ragwell-0.1.0/src/ragwell/_generated/models/search_response.py +98 -0
  163. ragwell-0.1.0/src/ragwell/_generated/models/source_coordinate_kind.py +9 -0
  164. ragwell-0.1.0/src/ragwell/_generated/models/source_span.py +155 -0
  165. ragwell-0.1.0/src/ragwell/_generated/models/structural_unit.py +141 -0
  166. ragwell-0.1.0/src/ragwell/_generated/models/structural_unit_kind.py +13 -0
  167. ragwell-0.1.0/src/ragwell/_generated/models/text_retrieval_citation_response.py +98 -0
  168. ragwell-0.1.0/src/ragwell/_generated/models/upload_session_response.py +262 -0
  169. ragwell-0.1.0/src/ragwell/_generated/models/upload_state.py +12 -0
  170. ragwell-0.1.0/src/ragwell/_generated/types.py +54 -0
  171. ragwell-0.1.0/src/ragwell/_sync_http.py +217 -0
  172. ragwell-0.1.0/src/ragwell/_transport.py +891 -0
  173. ragwell-0.1.0/src/ragwell/async_client.py +1118 -0
  174. ragwell-0.1.0/src/ragwell/client.py +1099 -0
  175. ragwell-0.1.0/src/ragwell/errors.py +205 -0
  176. ragwell-0.1.0/src/ragwell/py.typed +0 -0
  177. ragwell-0.1.0/src/ragwell/types.py +34 -0
  178. ragwell-0.1.0/tests/__init__.py +1 -0
  179. ragwell-0.1.0/tests/_fixtures.py +386 -0
  180. ragwell-0.1.0/tests/test_behavior.py +627 -0
  181. ragwell-0.1.0/tests/test_beta_validation.py +393 -0
  182. ragwell-0.1.0/tests/test_contract_coverage.py +255 -0
  183. ragwell-0.1.0/tests/test_examples.py +71 -0
  184. ragwell-0.1.0/tests/test_packaging.py +314 -0
  185. ragwell-0.1.0/tests/test_qualification.py +48 -0
  186. ragwell-0.1.0/tests/test_reliability.py +843 -0
  187. ragwell-0.1.0/uv.lock +874 -0
@@ -0,0 +1,22 @@
1
+ # Python environments and generated files
2
+ .venv/
3
+ __pycache__/
4
+ *.py[cod]
5
+ *.egg-info/
6
+ build/
7
+ dist/
8
+
9
+ # Development tool caches
10
+ .mypy_cache/
11
+ .pytest_cache/
12
+ .ruff_cache/
13
+ .coverage
14
+ .coverage.*
15
+ htmlcov/
16
+
17
+ # Local credentials and editor/OS files
18
+ .env
19
+ .env.*
20
+ .DS_Store
21
+ .idea/
22
+ .vscode/
@@ -0,0 +1,23 @@
1
+ # Ragwell Python SDK guidance
2
+
3
+ - This standalone repository contains the development Ragwell Python SDK. Read
4
+ `README.md`, `CONTRIBUTING.md`, and `pyproject.toml` before editing.
5
+ - Keep changes within the requested scope. Public behavior is maintained in the
6
+ handwritten clients/resources; never edit `src/ragwell/_generated` by hand.
7
+ - Support Python 3.11+ syntax and the CPython 3.11–3.14 CI matrix. Keep public
8
+ boundaries explicitly typed and retain `src/ragwell/py.typed` in distributions.
9
+ - Keep runtime dependencies minimal and development tools in the development
10
+ dependency group. Update `uv.lock` with dependency changes; do not hand-edit it.
11
+ - Installation, imports, builds, and ordinary tests must be independent of backend
12
+ imports, private repositories, credentials, provider calls, and model downloads.
13
+ - Wire schemas come from the reviewed vendored artifact under `contracts/`.
14
+ Regenerate through `scripts/generate.py` and preserve the recorded digest and
15
+ complete 26-operation sync/async mapping.
16
+ - Add deterministic tests for real behavior. Preserve the wheel/sdist and clean
17
+ installed-package checks. Run the README checks and report unavailable checks
18
+ accurately.
19
+ - Never inspect local `.env` values or include secrets, customer data, or private
20
+ infrastructure details in source, artifacts, logs, or documentation.
21
+ - Keep documentation truthful about development, qualification, and publication
22
+ status. Preserve unrelated changes.
23
+ Commit, push, publish, and repository-setting changes require an explicit request.
@@ -0,0 +1,25 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 — 2026-09-22
4
+
5
+ First developer beta. The release uses existing-project handles and scoped machine
6
+ credentials; project and key administration remain outside the SDK.
7
+
8
+ - Complete typed sync/async coverage of the 26 reviewed machine operations, with
9
+ existing-project handles and scoped bearer credentials.
10
+ - Upload, resumed waiting, lazy pagination and verified export downloads, with
11
+ bounded deadlines/retries and stable idempotency identity.
12
+ - Reliability corrections for end-to-end budgets, streamed response/download caps,
13
+ accepted-intake recovery identifiers and redacted protocol/transport failures.
14
+ - Reviewed contract packaged in the wheel, installed-package identity verification,
15
+ complete local HTTP fixture qualification, and endpoint-only test ownership.
16
+ - Normalize installed-package inventory paths across Windows and POSIX during
17
+ wheel verification, retaining modified-file and unexpected-file checks.
18
+ - Opt-in beta lifecycle validation against an independently prepared account/project,
19
+ with private credentials, bounded synthetic usage and checkpointed cleanup reports.
20
+ - API reference, lifecycle examples, compatibility/security guidance and local release
21
+ evidence. The Linux, macOS and Windows hosted matrix passes, private vulnerability
22
+ reporting is enabled, and publication uses protected OIDC publishers.
23
+
24
+ Project creation/administration, key management, browser identity, billing and answer
25
+ generation are outside this SDK's current scope.
@@ -0,0 +1,65 @@
1
+ # Contributing
2
+
3
+ This repository contains the development Ragwell Python SDK. Discuss new public SDK
4
+ capabilities in an issue before implementing them, and keep each pull request focused. Include a short
5
+ description of the change and the checks actually run. Use synthetic examples;
6
+ never include credentials or customer documents in code, logs, issues, or tests.
7
+
8
+ ## Development workflow
9
+
10
+ Follow the setup and checks in [README.md](README.md). Maintained code lives in
11
+ `src/ragwell`; generated internals live in `src/ragwell/_generated`; contract,
12
+ behavior, and packaging tests live in `tests`. Ruff handles formatting and linting,
13
+ mypy checks types in strict mode against Python 3.11, and pytest runs the tests.
14
+ Every contract update must retain the complete sync/async operation map and add
15
+ deterministic wire/failure tests. Avoid placeholder tests.
16
+
17
+ The reviewed contract is vendored under `contracts/`. Regenerate only through:
18
+
19
+ ```sh
20
+ uv run --locked python scripts/generate.py
21
+ uv run --locked python scripts/generate.py --check
22
+ ```
23
+
24
+ Never edit generated output by hand. Review the source artifact digest, manifest,
25
+ generator warnings, public mapping, and wire behavior together. The SDK must remain
26
+ buildable without the backend checkout.
27
+
28
+ Run `uv run --locked ruff format .` to format changes. Check the complete
29
+ CPython 3.11–3.14 matrix in CI before merging. Ordinary tests must run without API
30
+ access, credentials, model downloads, or private repositories.
31
+
32
+ Development tools belong in `[dependency-groups].dev`, separate from runtime
33
+ dependencies. Review and commit `pyproject.toml` and `uv.lock` together when changing
34
+ dependencies. To update one tool within its declared range:
35
+
36
+ ```sh
37
+ uv lock --upgrade-package ruff
38
+ uv sync --locked
39
+ ```
40
+
41
+ Run all checks after an update. Keep the uv version in `pyproject.toml`, CI, and the
42
+ README aligned. The development lock does not constrain downstream consumers.
43
+ Runtime dependency ranges belong in `[project].dependencies`; generation tools
44
+ remain development-only.
45
+ The build backend is also a development dependency so `python -m build
46
+ --no-isolation` uses the locked build tools. Its default build makes the wheel from
47
+ the source distribution, checking that the source archive is self-contained.
48
+
49
+ Tool configuration follows the official [uv project guide](https://docs.astral.sh/uv/guides/projects/),
50
+ [Python packaging guide](https://packaging.python.org/en/latest/tutorials/packaging-projects/),
51
+ [mypy configuration](https://mypy.readthedocs.io/en/stable/config_file.html), and
52
+ [pytest integration guidance](https://docs.pytest.org/en/stable/explanation/goodpractices.html).
53
+
54
+ ## Attribution and future releases
55
+
56
+ The MIT notice uses `alexd775`, the verified repository owner's GitHub handle.
57
+ A legal person or entity name has not been supplied; confirm any replacement
58
+ attribution with the owner rather than guessing it. PyPI name availability and
59
+ publisher ownership remain unverified. Publication and release automation require
60
+ separate maintainer authorization after SDK implementation and qualification.
61
+
62
+ Keep the [API reference](docs/api-reference.md), [compatibility policy](docs/compatibility.md)
63
+ and [changelog](CHANGELOG.md) current when behavior changes. Execute examples as
64
+ part of the offline suite. Follow [release preparation](docs/releasing.md) for
65
+ artifact/security gates and [SECURITY.md](SECURITY.md) for confidential reports.
ragwell-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 alexd775
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
ragwell-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,179 @@
1
+ Metadata-Version: 2.5
2
+ Name: ragwell
3
+ Version: 0.1.0
4
+ Summary: Typed Python SDK for the Ragwell managed retrieval API
5
+ Project-URL: Repository, https://github.com/alexd775/ragwell-python
6
+ Project-URL: Issues, https://github.com/alexd775/ragwell-python/issues
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Programming Language :: Python :: 3 :: Only
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
15
+ Classifier: Programming Language :: Python :: Implementation :: CPython
16
+ Classifier: Typing :: Typed
17
+ Requires-Python: >=3.11
18
+ Requires-Dist: attrs<26,>=22.2
19
+ Requires-Dist: httpcore<1.1,>=1.0.9
20
+ Requires-Dist: httpx<0.29,>=0.27.2
21
+ Requires-Dist: python-dateutil<3,>=2.8.2
22
+ Description-Content-Type: text/markdown
23
+
24
+ # Ragwell Python SDK
25
+
26
+ Typed synchronous and asynchronous Python clients for Ragwell, a managed service
27
+ for document ingestion and retrieval with source citations.
28
+
29
+ **Status: `0.1.0` developer beta.** The complete reviewed machine API is implemented
30
+ and qualified from an installed wheel against an isolated local HTTP service. The
31
+ SDK returns retrieval evidence and citations; it does not generate answers.
32
+
33
+ ## Requirements and installation
34
+
35
+ Python 3.11 or newer is required. Install the `ragwell` distribution from PyPI:
36
+
37
+ ```sh
38
+ python -m pip install ragwell
39
+ ```
40
+
41
+ For local development:
42
+
43
+ ```sh
44
+ uv sync --locked --python 3.11
45
+ ```
46
+
47
+ Runtime use requires an existing project grant and API key. The SDK does not create
48
+ projects, users, keys, or billing resources. Supply the endpoint and key explicitly
49
+ or through `RAGWELL_BASE_URL` and `RAGWELL_API_KEY`; explicit arguments win. No beta
50
+ hostname is built into the package and no `.env` file is loaded implicitly.
51
+
52
+ ## Synchronous quick start
53
+
54
+ ```python
55
+ import os
56
+ from pathlib import Path
57
+
58
+ from ragwell import Ragwell
59
+ from ragwell.types import SearchFilters
60
+
61
+ with Ragwell() as client:
62
+ project = client.project(os.environ["RAGWELL_PROJECT_ID"])
63
+ ready = project.documents.upload_and_wait(
64
+ file=Path("guide.pdf"),
65
+ wait_timeout=300,
66
+ )
67
+ results = project.search(
68
+ query="What is the retention policy?",
69
+ filters=SearchFilters(document_ids=[ready.intake.document.id]),
70
+ )
71
+ for item in results.items:
72
+ print(item.rank, item.source_filename, item.parts)
73
+ ```
74
+
75
+ ## Asynchronous quick start
76
+
77
+ ```python
78
+ import os
79
+
80
+ from ragwell import AsyncRagwell
81
+
82
+
83
+ async def retrieve(query: str):
84
+ async with AsyncRagwell() as client:
85
+ project = client.project(os.environ["RAGWELL_PROJECT_ID"])
86
+ return await project.search(query=query)
87
+ ```
88
+
89
+ Initialize one async client at application startup, share it within its owning event
90
+ loop, and close it at shutdown. Injected HTTPX clients are borrowed unless
91
+ `owns_http_client=True`; SDK-created pools are owned and closed by the SDK.
92
+
93
+ ## Public resource layout
94
+
95
+ `client.project(project_id)` is local and performs no preflight request. Both client
96
+ styles expose the same 26 contract operations:
97
+
98
+ - `client.upload_policy.get()`
99
+ - `project.get()` and `project.embedding_connection.get()`
100
+ - `project.uploads.create()`, `.get()`, `.upload_content()`, and `.finalize()`
101
+ - `project.documents.list()`, `.get()`, `.replace_metadata()`, `.delete()`,
102
+ `.inspect()`, and `.activity()`
103
+ - `project.documents.generations.list()`, `.chunks.list()`, and `.sources.get()`
104
+ - `project.documents.exports.create()`, `.get()`, `.stream_part()`, and
105
+ `.download_part()`
106
+ - `project.jobs.list()`, `.get()`, `.retry()`, and `.cancel()`
107
+ - `project.deletions.get()` and `.retry()`
108
+ - `project.search()`
109
+
110
+ Convenience workflows add `documents.upload()`, `documents.upload_and_wait()`,
111
+ `jobs.wait()`, `deletions.wait()`, `documents.exports.wait()`, and lazy `.iter()`
112
+ methods for documents, jobs, generations, and chunks.
113
+
114
+ Generated public types and enums are available from `ragwell.types`. They preserve
115
+ UUIDs, aware timestamps, omission through `UNSET`, explicit null, complete source
116
+ parts and scores, command acceptance versus current resource state, and additive
117
+ response fields through `additional_properties`.
118
+
119
+ ## Reliability and ownership
120
+
121
+ - HTTP 202 means accepted, never completed. Waiters have finite deadlines and never
122
+ cancel or retry remote work implicitly.
123
+ - Job cursors are opaque and filter/project scoped. Iterators never parse or create
124
+ them, stop at null, and reject repeated cursors.
125
+ - Safe reads receive at most two bounded retries. Replayed mutations keep one
126
+ idempotency key for the logical command. Search is never automatically replayed.
127
+ - `command_in_progress` may retry within the deadline using `Retry-After`; quota,
128
+ authorization, validation, and revision/idempotency conflicts do not.
129
+ - Upload helpers accept paths, bytes, and seekable binary streams, hash incrementally,
130
+ restore caller cursors, and never close caller-owned streams. Bytes/streams need
131
+ an explicit filename.
132
+ - Export saves stream to an SDK-owned temporary file in the destination directory,
133
+ verifies manifest byte size and SHA-256, then replaces atomically. Overwrite is
134
+ opt-in.
135
+
136
+ See [deadlines, bounds and recovery](docs/reliability.md) for timeout-zero behavior,
137
+ transfer budgets, cancellation, decoded-body caps and accepted-intake recovery IDs.
138
+
139
+ Errors derive from `RagwellError`. `ApiError` preserves safe status/code, field
140
+ errors, quota detail, retry hints, operation ID, and server `X-Request-ID`. Transport,
141
+ protocol, wait-timeout, terminal-operation, pagination, and integrity failures are
142
+ distinct. Exceptions do not include keys, request bodies, queries, raw HTML, or
143
+ document content.
144
+
145
+ ## Development and qualification
146
+
147
+ ```sh
148
+ uv run --locked ruff format --check .
149
+ uv run --locked ruff check .
150
+ uv run --locked mypy
151
+ uv run --locked python scripts/generate.py --check
152
+ uv run --locked pytest
153
+ uv run --locked python -m build --no-isolation
154
+ ```
155
+
156
+ The vendored artifact is `2026-09-19.1`, machine SHA-256
157
+ `8e05de4ae0f3aa76261e97ad07be1fc77756f317c3e2c20ab2be3efb2cb6db90`.
158
+ See [contract provenance](contracts/README.md),
159
+ [generation qualification](docs/generation.md), and
160
+ [operation mapping](contracts/operations.json). Ordinary tests require no service,
161
+ credentials, provider calls, private repository, or model downloads.
162
+
163
+ The reviewed artifact is available in the public repository. Local installed-wheel HTTP qualification
164
+ is recorded in [HTTP qualification](docs/http-qualification.md). The
165
+ [release process](docs/releasing.md) records exact-artifact TestPyPI/PyPI controls.
166
+
167
+ An optional [beta lifecycle validation](docs/beta-validation.md) checks the installed
168
+ wheel against a dedicated existing beta project with a scoped key. It starts no
169
+ services and is separate from the full fixture matrix and ordinary offline CI.
170
+
171
+ Documentation: [API reference and scopes](docs/api-reference.md),
172
+ [sync lifecycle example](examples/sync_lifecycle.py),
173
+ [async lifecycle example](examples/async_lifecycle.py),
174
+ [compatibility and support](docs/compatibility.md), [security policy](SECURITY.md),
175
+ [changelog](CHANGELOG.md), and [release preparation](docs/releasing.md).
176
+
177
+ ## License
178
+
179
+ [MIT](LICENSE).
@@ -0,0 +1,156 @@
1
+ # Ragwell Python SDK
2
+
3
+ Typed synchronous and asynchronous Python clients for Ragwell, a managed service
4
+ for document ingestion and retrieval with source citations.
5
+
6
+ **Status: `0.1.0` developer beta.** The complete reviewed machine API is implemented
7
+ and qualified from an installed wheel against an isolated local HTTP service. The
8
+ SDK returns retrieval evidence and citations; it does not generate answers.
9
+
10
+ ## Requirements and installation
11
+
12
+ Python 3.11 or newer is required. Install the `ragwell` distribution from PyPI:
13
+
14
+ ```sh
15
+ python -m pip install ragwell
16
+ ```
17
+
18
+ For local development:
19
+
20
+ ```sh
21
+ uv sync --locked --python 3.11
22
+ ```
23
+
24
+ Runtime use requires an existing project grant and API key. The SDK does not create
25
+ projects, users, keys, or billing resources. Supply the endpoint and key explicitly
26
+ or through `RAGWELL_BASE_URL` and `RAGWELL_API_KEY`; explicit arguments win. No beta
27
+ hostname is built into the package and no `.env` file is loaded implicitly.
28
+
29
+ ## Synchronous quick start
30
+
31
+ ```python
32
+ import os
33
+ from pathlib import Path
34
+
35
+ from ragwell import Ragwell
36
+ from ragwell.types import SearchFilters
37
+
38
+ with Ragwell() as client:
39
+ project = client.project(os.environ["RAGWELL_PROJECT_ID"])
40
+ ready = project.documents.upload_and_wait(
41
+ file=Path("guide.pdf"),
42
+ wait_timeout=300,
43
+ )
44
+ results = project.search(
45
+ query="What is the retention policy?",
46
+ filters=SearchFilters(document_ids=[ready.intake.document.id]),
47
+ )
48
+ for item in results.items:
49
+ print(item.rank, item.source_filename, item.parts)
50
+ ```
51
+
52
+ ## Asynchronous quick start
53
+
54
+ ```python
55
+ import os
56
+
57
+ from ragwell import AsyncRagwell
58
+
59
+
60
+ async def retrieve(query: str):
61
+ async with AsyncRagwell() as client:
62
+ project = client.project(os.environ["RAGWELL_PROJECT_ID"])
63
+ return await project.search(query=query)
64
+ ```
65
+
66
+ Initialize one async client at application startup, share it within its owning event
67
+ loop, and close it at shutdown. Injected HTTPX clients are borrowed unless
68
+ `owns_http_client=True`; SDK-created pools are owned and closed by the SDK.
69
+
70
+ ## Public resource layout
71
+
72
+ `client.project(project_id)` is local and performs no preflight request. Both client
73
+ styles expose the same 26 contract operations:
74
+
75
+ - `client.upload_policy.get()`
76
+ - `project.get()` and `project.embedding_connection.get()`
77
+ - `project.uploads.create()`, `.get()`, `.upload_content()`, and `.finalize()`
78
+ - `project.documents.list()`, `.get()`, `.replace_metadata()`, `.delete()`,
79
+ `.inspect()`, and `.activity()`
80
+ - `project.documents.generations.list()`, `.chunks.list()`, and `.sources.get()`
81
+ - `project.documents.exports.create()`, `.get()`, `.stream_part()`, and
82
+ `.download_part()`
83
+ - `project.jobs.list()`, `.get()`, `.retry()`, and `.cancel()`
84
+ - `project.deletions.get()` and `.retry()`
85
+ - `project.search()`
86
+
87
+ Convenience workflows add `documents.upload()`, `documents.upload_and_wait()`,
88
+ `jobs.wait()`, `deletions.wait()`, `documents.exports.wait()`, and lazy `.iter()`
89
+ methods for documents, jobs, generations, and chunks.
90
+
91
+ Generated public types and enums are available from `ragwell.types`. They preserve
92
+ UUIDs, aware timestamps, omission through `UNSET`, explicit null, complete source
93
+ parts and scores, command acceptance versus current resource state, and additive
94
+ response fields through `additional_properties`.
95
+
96
+ ## Reliability and ownership
97
+
98
+ - HTTP 202 means accepted, never completed. Waiters have finite deadlines and never
99
+ cancel or retry remote work implicitly.
100
+ - Job cursors are opaque and filter/project scoped. Iterators never parse or create
101
+ them, stop at null, and reject repeated cursors.
102
+ - Safe reads receive at most two bounded retries. Replayed mutations keep one
103
+ idempotency key for the logical command. Search is never automatically replayed.
104
+ - `command_in_progress` may retry within the deadline using `Retry-After`; quota,
105
+ authorization, validation, and revision/idempotency conflicts do not.
106
+ - Upload helpers accept paths, bytes, and seekable binary streams, hash incrementally,
107
+ restore caller cursors, and never close caller-owned streams. Bytes/streams need
108
+ an explicit filename.
109
+ - Export saves stream to an SDK-owned temporary file in the destination directory,
110
+ verifies manifest byte size and SHA-256, then replaces atomically. Overwrite is
111
+ opt-in.
112
+
113
+ See [deadlines, bounds and recovery](docs/reliability.md) for timeout-zero behavior,
114
+ transfer budgets, cancellation, decoded-body caps and accepted-intake recovery IDs.
115
+
116
+ Errors derive from `RagwellError`. `ApiError` preserves safe status/code, field
117
+ errors, quota detail, retry hints, operation ID, and server `X-Request-ID`. Transport,
118
+ protocol, wait-timeout, terminal-operation, pagination, and integrity failures are
119
+ distinct. Exceptions do not include keys, request bodies, queries, raw HTML, or
120
+ document content.
121
+
122
+ ## Development and qualification
123
+
124
+ ```sh
125
+ uv run --locked ruff format --check .
126
+ uv run --locked ruff check .
127
+ uv run --locked mypy
128
+ uv run --locked python scripts/generate.py --check
129
+ uv run --locked pytest
130
+ uv run --locked python -m build --no-isolation
131
+ ```
132
+
133
+ The vendored artifact is `2026-09-19.1`, machine SHA-256
134
+ `8e05de4ae0f3aa76261e97ad07be1fc77756f317c3e2c20ab2be3efb2cb6db90`.
135
+ See [contract provenance](contracts/README.md),
136
+ [generation qualification](docs/generation.md), and
137
+ [operation mapping](contracts/operations.json). Ordinary tests require no service,
138
+ credentials, provider calls, private repository, or model downloads.
139
+
140
+ The reviewed artifact is available in the public repository. Local installed-wheel HTTP qualification
141
+ is recorded in [HTTP qualification](docs/http-qualification.md). The
142
+ [release process](docs/releasing.md) records exact-artifact TestPyPI/PyPI controls.
143
+
144
+ An optional [beta lifecycle validation](docs/beta-validation.md) checks the installed
145
+ wheel against a dedicated existing beta project with a scoped key. It starts no
146
+ services and is separate from the full fixture matrix and ordinary offline CI.
147
+
148
+ Documentation: [API reference and scopes](docs/api-reference.md),
149
+ [sync lifecycle example](examples/sync_lifecycle.py),
150
+ [async lifecycle example](examples/async_lifecycle.py),
151
+ [compatibility and support](docs/compatibility.md), [security policy](SECURITY.md),
152
+ [changelog](CHANGELOG.md), and [release preparation](docs/releasing.md).
153
+
154
+ ## License
155
+
156
+ [MIT](LICENSE).
@@ -0,0 +1,30 @@
1
+ # Security policy
2
+
3
+ This policy covers the `0.1.0` developer beta and its release candidate. There is no
4
+ guaranteed response-time SLA. Maintenance initially covers the current 0.x minor.
5
+
6
+ ## Reporting a vulnerability
7
+
8
+ Do not put API keys, credentials, document/query contents, exploit details involving
9
+ other tenants, or raw HTTP dumps in public GitHub issues.
10
+
11
+ Use GitHub's private “Report a vulnerability” route for this repository. Private
12
+ vulnerability reporting was verified enabled on 2026-09-22. Use public issues only
13
+ for non-sensitive defects and questions.
14
+
15
+ When a private route is available, include a minimal synthetic reproduction, affected
16
+ SDK/API contract versions, impact, and safe request IDs. Avoid sending active keys
17
+ or customer documents. Rotate a suspected exposed API key through normal account
18
+ administration; the SDK cannot rotate or revoke keys.
19
+
20
+ ## Maintainer checks
21
+
22
+ Keep dependency, secret and distribution scans with each release's evidence. Review
23
+ runtime and development dependencies, preserve license notices, and scan source plus
24
+ wheel/sdist contents. A passing advisory scan is a point-in-time check, not a claim
25
+ that every defect or secret has been ruled out. Keep CI for forks credential-free.
26
+ SDK/API endpoint tests must use dedicated synthetic projects and scoped keys.
27
+
28
+ Use a reviewed immutable artifact, protected publisher and recorded provenance.
29
+ Do not publish when the required CI, package ownership or reporting-channel gates
30
+ are unresolved. See [release preparation](docs/releasing.md).
@@ -0,0 +1,140 @@
1
+ {
2
+ "api_info_version": "0.1.0",
3
+ "artifact_version": "2026-09-19.1",
4
+ "canonical_sha256": "57a1f942f7ca8b89186753a20320588b57e2425663b8529b36037066c02328bb",
5
+ "compatibility_notes": "See contracts/machine/README.md. Artifact identity is its digest, not runtime version equality. Installed Python SDK qualification and public publication remain separate release gates.",
6
+ "machine_sha256": "8e05de4ae0f3aa76261e97ad07be1fc77756f317c3e2c20ab2be3efb2cb6db90",
7
+ "operation_count": 26,
8
+ "operations": [
9
+ {
10
+ "method": "GET",
11
+ "operation_id": "get_document_upload_policy_v1_document_upload_policy_get",
12
+ "path": "/v1/document-upload-policy"
13
+ },
14
+ {
15
+ "method": "GET",
16
+ "operation_id": "get_project_v1_projects__project_id__get",
17
+ "path": "/v1/projects/{project_id}"
18
+ },
19
+ {
20
+ "method": "GET",
21
+ "operation_id": "get_document_deletion_v1_projects__project_id__document_deletions__receipt_id__get",
22
+ "path": "/v1/projects/{project_id}/document-deletions/{receipt_id}"
23
+ },
24
+ {
25
+ "method": "POST",
26
+ "operation_id": "retry_document_deletion_v1_projects__project_id__document_deletions__receipt_id__retry_post",
27
+ "path": "/v1/projects/{project_id}/document-deletions/{receipt_id}/retry"
28
+ },
29
+ {
30
+ "method": "GET",
31
+ "operation_id": "list_documents_v1_projects__project_id__documents_get",
32
+ "path": "/v1/projects/{project_id}/documents"
33
+ },
34
+ {
35
+ "method": "DELETE",
36
+ "operation_id": "delete_document_v1_projects__project_id__documents__document_id__delete",
37
+ "path": "/v1/projects/{project_id}/documents/{document_id}"
38
+ },
39
+ {
40
+ "method": "GET",
41
+ "operation_id": "get_document_v1_projects__project_id__documents__document_id__get",
42
+ "path": "/v1/projects/{project_id}/documents/{document_id}"
43
+ },
44
+ {
45
+ "method": "GET",
46
+ "operation_id": "get_document_activity_v1_projects__project_id__documents__document_id__activity_get",
47
+ "path": "/v1/projects/{project_id}/documents/{document_id}/activity"
48
+ },
49
+ {
50
+ "method": "POST",
51
+ "operation_id": "create_document_export_v1_projects__project_id__documents__document_id__exports_post",
52
+ "path": "/v1/projects/{project_id}/documents/{document_id}/exports"
53
+ },
54
+ {
55
+ "method": "GET",
56
+ "operation_id": "get_document_export_v1_projects__project_id__documents__document_id__exports__export_id__get",
57
+ "path": "/v1/projects/{project_id}/documents/{document_id}/exports/{export_id}"
58
+ },
59
+ {
60
+ "method": "GET",
61
+ "operation_id": "download_document_export_part_v1_projects__project_id__documents__document_id__exports__export_id__parts__part_number__get",
62
+ "path": "/v1/projects/{project_id}/documents/{document_id}/exports/{export_id}/parts/{part_number}"
63
+ },
64
+ {
65
+ "method": "GET",
66
+ "operation_id": "list_document_generations_v1_projects__project_id__documents__document_id__generations_get",
67
+ "path": "/v1/projects/{project_id}/documents/{document_id}/generations"
68
+ },
69
+ {
70
+ "method": "GET",
71
+ "operation_id": "list_document_chunks_v1_projects__project_id__documents__document_id__generations__generation_id__chunks_get",
72
+ "path": "/v1/projects/{project_id}/documents/{document_id}/generations/{generation_id}/chunks"
73
+ },
74
+ {
75
+ "method": "GET",
76
+ "operation_id": "inspect_document_source_v1_projects__project_id__documents__document_id__generations__generation_id__sources__source_id__get",
77
+ "path": "/v1/projects/{project_id}/documents/{document_id}/generations/{generation_id}/sources/{source_id}"
78
+ },
79
+ {
80
+ "method": "GET",
81
+ "operation_id": "inspect_document_v1_projects__project_id__documents__document_id__inspection_get",
82
+ "path": "/v1/projects/{project_id}/documents/{document_id}/inspection"
83
+ },
84
+ {
85
+ "method": "PUT",
86
+ "operation_id": "replace_document_metadata_v1_projects__project_id__documents__document_id__metadata_put",
87
+ "path": "/v1/projects/{project_id}/documents/{document_id}/metadata"
88
+ },
89
+ {
90
+ "method": "GET",
91
+ "operation_id": "inspect_embedding_connection_v1_projects__project_id__embedding_connection_get",
92
+ "path": "/v1/projects/{project_id}/embedding-connection"
93
+ },
94
+ {
95
+ "method": "GET",
96
+ "operation_id": "list_jobs_v1_projects__project_id__jobs_get",
97
+ "path": "/v1/projects/{project_id}/jobs"
98
+ },
99
+ {
100
+ "method": "GET",
101
+ "operation_id": "get_job_v1_projects__project_id__jobs__job_id__get",
102
+ "path": "/v1/projects/{project_id}/jobs/{job_id}"
103
+ },
104
+ {
105
+ "method": "POST",
106
+ "operation_id": "cancel_job_v1_projects__project_id__jobs__job_id__cancel_post",
107
+ "path": "/v1/projects/{project_id}/jobs/{job_id}/cancel"
108
+ },
109
+ {
110
+ "method": "POST",
111
+ "operation_id": "retry_job_v1_projects__project_id__jobs__job_id__retry_post",
112
+ "path": "/v1/projects/{project_id}/jobs/{job_id}/retry"
113
+ },
114
+ {
115
+ "method": "POST",
116
+ "operation_id": "search_v1_projects__project_id__search_post",
117
+ "path": "/v1/projects/{project_id}/search"
118
+ },
119
+ {
120
+ "method": "POST",
121
+ "operation_id": "create_upload_v1_projects__project_id__uploads_post",
122
+ "path": "/v1/projects/{project_id}/uploads"
123
+ },
124
+ {
125
+ "method": "GET",
126
+ "operation_id": "get_upload_state",
127
+ "path": "/v1/projects/{project_id}/uploads/{upload_id}"
128
+ },
129
+ {
130
+ "method": "PUT",
131
+ "operation_id": "upload_content_v1_projects__project_id__uploads__upload_id__content_put",
132
+ "path": "/v1/projects/{project_id}/uploads/{upload_id}/content"
133
+ },
134
+ {
135
+ "method": "POST",
136
+ "operation_id": "finalize_upload_v1_projects__project_id__uploads__upload_id__finalize_post",
137
+ "path": "/v1/projects/{project_id}/uploads/{upload_id}/finalize"
138
+ }
139
+ ]
140
+ }