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.
- ragwell-0.1.0/.gitignore +22 -0
- ragwell-0.1.0/AGENTS.md +23 -0
- ragwell-0.1.0/CHANGELOG.md +25 -0
- ragwell-0.1.0/CONTRIBUTING.md +65 -0
- ragwell-0.1.0/LICENSE +21 -0
- ragwell-0.1.0/PKG-INFO +179 -0
- ragwell-0.1.0/README.md +156 -0
- ragwell-0.1.0/SECURITY.md +30 -0
- ragwell-0.1.0/contracts/2026-09-19.1/manifest.json +140 -0
- ragwell-0.1.0/contracts/2026-09-19.1/openapi.json +8778 -0
- ragwell-0.1.0/contracts/README.md +27 -0
- ragwell-0.1.0/contracts/operations.json +32 -0
- ragwell-0.1.0/docs/api-reference.md +191 -0
- ragwell-0.1.0/docs/beta-validation.md +100 -0
- ragwell-0.1.0/docs/compatibility.md +58 -0
- ragwell-0.1.0/docs/generation.md +50 -0
- ragwell-0.1.0/docs/http-qualification.md +110 -0
- ragwell-0.1.0/docs/local-qualification.md +218 -0
- ragwell-0.1.0/docs/qualification/2026-09-21-beta-lifecycle.json +99 -0
- ragwell-0.1.0/docs/qualification/2026-09-21-dependency-audit.json +1 -0
- ragwell-0.1.0/docs/qualification/2026-09-21-local-http.json +440 -0
- ragwell-0.1.0/docs/qualification/2026-09-21-release-preparation.json +155 -0
- ragwell-0.1.0/docs/qualification/2026-09-21-runtime-licenses.json +85 -0
- ragwell-0.1.0/docs/qualification/2026-09-21-secret-scan-policy.toml +8 -0
- ragwell-0.1.0/docs/qualification/2026-09-22-dependency-audit.json +1 -0
- ragwell-0.1.0/docs/qualification/2026-09-22-hosted-ci.json +26 -0
- ragwell-0.1.0/docs/qualification/2026-09-22-release-candidate.json +69 -0
- ragwell-0.1.0/docs/qualification-fixtures.md +84 -0
- ragwell-0.1.0/docs/releasing.md +89 -0
- ragwell-0.1.0/docs/reliability.md +68 -0
- ragwell-0.1.0/examples/__init__.py +1 -0
- ragwell-0.1.0/examples/async_lifecycle.py +69 -0
- ragwell-0.1.0/examples/async_search.py +26 -0
- ragwell-0.1.0/examples/sync_lifecycle.py +66 -0
- ragwell-0.1.0/examples/sync_search.py +23 -0
- ragwell-0.1.0/openapi-python-client.yaml +11 -0
- ragwell-0.1.0/pyproject.toml +93 -0
- ragwell-0.1.0/qualification/beta_runner.py +470 -0
- ragwell-0.1.0/qualification/evidence.py +216 -0
- ragwell-0.1.0/qualification/http_runner.py +712 -0
- ragwell-0.1.0/scripts/generate.py +142 -0
- ragwell-0.1.0/src/ragwell/__init__.py +50 -0
- ragwell-0.1.0/src/ragwell/_common.py +393 -0
- ragwell-0.1.0/src/ragwell/_deadline.py +78 -0
- ragwell-0.1.0/src/ragwell/_decoding.py +61 -0
- ragwell-0.1.0/src/ragwell/_generated/__init__.py +8 -0
- ragwell-0.1.0/src/ragwell/_generated/api/__init__.py +1 -0
- ragwell-0.1.0/src/ragwell/_generated/api/document_deletion/__init__.py +1 -0
- ragwell-0.1.0/src/ragwell/_generated/api/document_deletion/delete_document_v1_projects_project_id_documents_document_id_delete.py +228 -0
- 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
- 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
- ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/__init__.py +1 -0
- 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
- 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
- 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
- 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
- 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
- ragwell-0.1.0/src/ragwell/_generated/api/document_inspection/inspect_document_v1_projects_project_id_documents_document_id_inspection_get.py +234 -0
- 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
- 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
- ragwell-0.1.0/src/ragwell/_generated/api/documents/__init__.py +1 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/create_upload_v1_projects_project_id_uploads_post.py +273 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/finalize_upload_v1_projects_project_id_uploads_upload_id_finalize_post.py +211 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/get_document_upload_policy_v1_document_upload_policy_get.py +144 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/get_document_v1_projects_project_id_documents_document_id_get.py +201 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/get_upload_state.py +206 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/list_documents_v1_projects_project_id_documents_get.py +366 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/replace_document_metadata_v1_projects_project_id_documents_document_id_metadata_put.py +251 -0
- ragwell-0.1.0/src/ragwell/_generated/api/documents/upload_content_v1_projects_project_id_uploads_upload_id_content_put.py +281 -0
- ragwell-0.1.0/src/ragwell/_generated/api/embedding_connections/__init__.py +1 -0
- ragwell-0.1.0/src/ragwell/_generated/api/embedding_connections/inspect_embedding_connection_v1_projects_project_id_embedding_connection_get.py +192 -0
- ragwell-0.1.0/src/ragwell/_generated/api/ingestion/__init__.py +1 -0
- ragwell-0.1.0/src/ragwell/_generated/api/ingestion/cancel_job_v1_projects_project_id_jobs_job_id_cancel_post.py +233 -0
- ragwell-0.1.0/src/ragwell/_generated/api/ingestion/get_job_v1_projects_project_id_jobs_job_id_get.py +201 -0
- ragwell-0.1.0/src/ragwell/_generated/api/ingestion/list_jobs_v1_projects_project_id_jobs_get.py +387 -0
- ragwell-0.1.0/src/ragwell/_generated/api/ingestion/retry_job_v1_projects_project_id_jobs_job_id_retry_post.py +233 -0
- ragwell-0.1.0/src/ragwell/_generated/api/projects/__init__.py +1 -0
- ragwell-0.1.0/src/ragwell/_generated/api/projects/get_project_v1_projects_project_id_get.py +187 -0
- ragwell-0.1.0/src/ragwell/_generated/api/retrieval/__init__.py +1 -0
- ragwell-0.1.0/src/ragwell/_generated/api/retrieval/search_v1_projects_project_id_search_post.py +235 -0
- ragwell-0.1.0/src/ragwell/_generated/client.py +274 -0
- ragwell-0.1.0/src/ragwell/_generated/errors.py +16 -0
- ragwell-0.1.0/src/ragwell/_generated/models/__init__.py +191 -0
- ragwell-0.1.0/src/ragwell/_generated/models/accepted_document_format_response.py +96 -0
- ragwell-0.1.0/src/ragwell/_generated/models/accepted_document_format_response_media_type.py +10 -0
- ragwell-0.1.0/src/ragwell/_generated/models/attempt_status.py +11 -0
- ragwell-0.1.0/src/ragwell/_generated/models/chunk_part.py +171 -0
- ragwell-0.1.0/src/ragwell/_generated/models/chunk_part_kind.py +10 -0
- ragwell-0.1.0/src/ragwell/_generated/models/chunk_stage_progress.py +53 -0
- ragwell-0.1.0/src/ragwell/_generated/models/chunk_stage_progress_phase.py +9 -0
- ragwell-0.1.0/src/ragwell/_generated/models/command_acceptance.py +121 -0
- ragwell-0.1.0/src/ragwell/_generated/models/command_acceptance_operation.py +12 -0
- ragwell-0.1.0/src/ragwell/_generated/models/create_document_export_request.py +48 -0
- ragwell-0.1.0/src/ragwell/_generated/models/create_upload_request.py +96 -0
- ragwell-0.1.0/src/ragwell/_generated/models/create_upload_request_declared_media_type.py +10 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_annotation_field_response.py +81 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_annotation_field_response_key.py +11 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_annotation_policy_response.py +116 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_chunk_activity.py +78 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_chunk_info.py +228 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_chunk_page.py +105 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_deletion_response.py +268 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_deletion_state.py +12 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_embedding_usage.py +227 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_embedding_usage_totals.py +152 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_export_part_response.py +70 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_export_response.py +205 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_export_response_state.py +12 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_format.py +10 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_generation_info.py +260 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_generation_page.py +95 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_inspection_response.py +325 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_job_info.py +275 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_list_response.py +95 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_metadata_input.py +106 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_metadata_response.py +102 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_profile_info.py +174 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_response.py +158 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_retrieval_activity.py +156 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_source_info.py +102 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_source_preview.py +161 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_stage_attempt.py +133 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_state.py +12 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_upload_policy_response.py +94 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_version_response.py +109 -0
- ragwell-0.1.0/src/ragwell/_generated/models/document_version_state.py +11 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_notice_response.py +124 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_notice_response_lane.py +9 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_notice_response_state.py +9 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response.py +196 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response_funding_source.py +9 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response_health.py +10 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_connection_response_status.py +11 -0
- ragwell-0.1.0/src/ragwell/_generated/models/embedding_serialization.py +65 -0
- ragwell-0.1.0/src/ragwell/_generated/models/error_detail.py +91 -0
- ragwell-0.1.0/src/ragwell/_generated/models/error_response.py +62 -0
- ragwell-0.1.0/src/ragwell/_generated/models/field_error.py +70 -0
- ragwell-0.1.0/src/ragwell/_generated/models/finalized_intake_response.py +88 -0
- ragwell-0.1.0/src/ragwell/_generated/models/index_generation_status.py +10 -0
- ragwell-0.1.0/src/ragwell/_generated/models/ingestion_job_list_response.py +83 -0
- ragwell-0.1.0/src/ragwell/_generated/models/ingestion_job_response.py +318 -0
- ragwell-0.1.0/src/ragwell/_generated/models/ingestion_job_status.py +14 -0
- ragwell-0.1.0/src/ragwell/_generated/models/ingestion_stage.py +13 -0
- ragwell-0.1.0/src/ragwell/_generated/models/limit_key.py +13 -0
- ragwell-0.1.0/src/ragwell/_generated/models/limit_unit.py +12 -0
- ragwell-0.1.0/src/ragwell/_generated/models/plan_limit_error_detail.py +178 -0
- ragwell-0.1.0/src/ragwell/_generated/models/plan_limit_error_detail_code.py +9 -0
- ragwell-0.1.0/src/ragwell/_generated/models/plan_limit_error_response.py +62 -0
- ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_editability_response.py +99 -0
- ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_editability_response_reason_code_type_0.py +9 -0
- ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_summary_response.py +153 -0
- ragwell-0.1.0/src/ragwell/_generated/models/processing_profile_technical_response.py +174 -0
- ragwell-0.1.0/src/ragwell/_generated/models/processing_service_class_id.py +10 -0
- ragwell-0.1.0/src/ragwell/_generated/models/processing_service_class_response.py +72 -0
- ragwell-0.1.0/src/ragwell/_generated/models/project_response.py +126 -0
- ragwell-0.1.0/src/ragwell/_generated/models/replace_document_metadata_request.py +57 -0
- ragwell-0.1.0/src/ragwell/_generated/models/retrieval_citation_response.py +91 -0
- ragwell-0.1.0/src/ragwell/_generated/models/retrieval_item_response.py +178 -0
- ragwell-0.1.0/src/ragwell/_generated/models/retrieval_scores_response.py +82 -0
- ragwell-0.1.0/src/ragwell/_generated/models/search_filters.py +110 -0
- ragwell-0.1.0/src/ragwell/_generated/models/search_request.py +84 -0
- ragwell-0.1.0/src/ragwell/_generated/models/search_response.py +98 -0
- ragwell-0.1.0/src/ragwell/_generated/models/source_coordinate_kind.py +9 -0
- ragwell-0.1.0/src/ragwell/_generated/models/source_span.py +155 -0
- ragwell-0.1.0/src/ragwell/_generated/models/structural_unit.py +141 -0
- ragwell-0.1.0/src/ragwell/_generated/models/structural_unit_kind.py +13 -0
- ragwell-0.1.0/src/ragwell/_generated/models/text_retrieval_citation_response.py +98 -0
- ragwell-0.1.0/src/ragwell/_generated/models/upload_session_response.py +262 -0
- ragwell-0.1.0/src/ragwell/_generated/models/upload_state.py +12 -0
- ragwell-0.1.0/src/ragwell/_generated/types.py +54 -0
- ragwell-0.1.0/src/ragwell/_sync_http.py +217 -0
- ragwell-0.1.0/src/ragwell/_transport.py +891 -0
- ragwell-0.1.0/src/ragwell/async_client.py +1118 -0
- ragwell-0.1.0/src/ragwell/client.py +1099 -0
- ragwell-0.1.0/src/ragwell/errors.py +205 -0
- ragwell-0.1.0/src/ragwell/py.typed +0 -0
- ragwell-0.1.0/src/ragwell/types.py +34 -0
- ragwell-0.1.0/tests/__init__.py +1 -0
- ragwell-0.1.0/tests/_fixtures.py +386 -0
- ragwell-0.1.0/tests/test_behavior.py +627 -0
- ragwell-0.1.0/tests/test_beta_validation.py +393 -0
- ragwell-0.1.0/tests/test_contract_coverage.py +255 -0
- ragwell-0.1.0/tests/test_examples.py +71 -0
- ragwell-0.1.0/tests/test_packaging.py +314 -0
- ragwell-0.1.0/tests/test_qualification.py +48 -0
- ragwell-0.1.0/tests/test_reliability.py +843 -0
- ragwell-0.1.0/uv.lock +874 -0
ragwell-0.1.0/.gitignore
ADDED
|
@@ -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/
|
ragwell-0.1.0/AGENTS.md
ADDED
|
@@ -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).
|
ragwell-0.1.0/README.md
ADDED
|
@@ -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
|
+
}
|