Skip to content

SK-3289: address Detect docs and sample parity feedback (Python) - #290

Merged
saileshwar-skyflow merged 3 commits into
flowvault-release/26.10.0from
saileshwar/SK-3289-address-parity-gap
Nov 11, 2026
Merged

saileshwar-skyflow merged 3 commits into
flowvault-release/26.10.0from
saileshwar/SK-3289-address-parity-gap

Conversation

@saileshwar-skyflow

Copy link
Copy Markdown
Collaborator

What

Addresses the final Detect feedback (docs + samples parity) for the Python SDKs — the items under Python (FlowVault) and Python (SkyVault), plus the shared nomenclature points. Docs/samples only; no SDK source changes.

flowvault README

  • Remove the unsupported SKYFLOW_ID file source and state plainly that flowvault's DeidentifySourceType is BASE64/PRESIGNED_URL only (previously a copy-paste AttributeError).
  • Document include_prefix / prefix_override on Entity and CustomType (incl. the include_prefix=NO "not re-identifiable" trap), and deidentification_type / destination on CustomType.
  • Add where-to-create pointers (Studio / management API) for the configuration id, token groups and redaction patterns in Before you start.
  • Add a Response examples and common errors section (sample JSON per shape + the common 400s).
  • Make the re-identify example a round trip with a real vault token; branch re-identify-file on output_type (was an unconditional base64 decode + hardcoded .txt).

skyvault README

  • Same re-identify round-trip fix (storing tokens in a table.column) and output_type branch.
  • Add a bold warning that deidentify_file no longer waits by default.
  • Note the server's default toxicity check; fix the stale v1 EOL banner (will reach → reached).

Samples (both SDKs)

  • Print request_id in every Detect error handler.

Nomenclature

  • Drop the "Detect V2" label from both READMEs and the flowvault samples README.
  • Rename the migration guide to docs/migrate_detect.md, retitle it ("Migrate to the new Detect methods (skyflow 3.0.0)"), cite skyflow 3.0.0 in the intro + timeline, and promote the deidentify_file behaviour change to a top-of-doc warning.

Notes / decisions

  • setup.py version is managed by release automation and is left unchanged; the guide now names 3.0.0 as the target — please confirm that's the release version.
  • The guide's detailed method/field mapping tables still use "V1/V2" column labels (standard for a migration mapping, same as the Go guide); the customer-facing framing (title, intro, timeline) drops the V1/V2 nomenclature. Happy to scrub the body fully if preferred.

Verification

  • All 12 Detect sample files compile (py_compile).
  • No remaining Detect V2 / V2 API strings in the touched docs; no SKYFLOW_ID left in the flowvault README.

🤖 Generated with Claude Code

Fix the Detect README and sample gaps raised in the final Detect feedback, for
both the flowvault and skyvault Python SDKs.

flowvault README:
- drop the unsupported SKYFLOW_ID file source (the enum is BASE64/PRESIGNED_URL only)
- document Entity/CustomType include_prefix and prefix_override, and CustomType
  deidentification_type and destination
- add where-to-create pointers for the configuration id, token groups and redaction patterns
- add response examples and a common-errors section
- make the re-identify example a round trip; branch re-identify file on output_type

skyvault README:
- make the re-identify example a round trip that stores tokens in a table.column;
  branch re-identify file on output_type
- add a bold warning that deidentify_file no longer waits by default
- note the server's default toxicity check; fix the stale v1 EOL banner

samples (both SDKs): print request_id in Detect error handlers.

Nomenclature: drop the "Detect V2" label from both READMEs and the samples README;
rename the migration guide to docs/migrate_detect.md, retitle it, cite skyflow 3.0.0,
and promote the deidentify_file behaviour change.

setup.py version is managed by release automation and left unchanged; the guide now
names 3.0.0 as the target.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@promptless

promptless Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Promptless documentation updates

saileshwar-skyflow and others added 2 commits November 10, 2026 17:37
flowvault:
- Disable the generated client's hidden retry layer so the SDK's
  configured max_retries (default 0) is honored and POSTs are not
  silently auto-retried.
- Pass the bearer token as None when absent so no empty
  "Authorization: Bearer " header is sent.
- Build insert/get wire objects inside the try block so pydantic
  ValidationError surfaces as a SkyflowError.
- Rewind a caller-supplied file_object to the start before upload
  (without closing the caller's handle).
- Guard client re-init and close with a lock.

common (shared by flowvault and skyvault):
- Validate env with isinstance instead of enum membership to avoid a
  TypeError on Python 3.9-3.11 for non-Env values.
- Attach the skyflow-python log handler once instead of clearing and
  re-adding it on every log call.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Mirror the Java flowvault change: reidentify_file only supports the file
formats that carry VAULT_TOKEN, so the single FileDataFormat enum is split
into separate types.

- enums: rename FileDataFormat -> DeidentifyFileDataFormat, add
  ReidentifyFileDataFormat (csv, docx, json, jsonl, pptx, txt, xlsx, xml)
- models: FileOutput uses DeidentifyFileDataFormat; add ReidentifyFileOutput;
  ReidentifyFileResponse.output is now a list of ReidentifyFileOutput
- mappers: separate deidentify/reidentify format resolvers; an unknown
  reidentify format maps to None
- re-exports, samples, READMEs and tests updated across flowvault and skyvault
- regenerate the public API contract baselines

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Public API contract change (skyvault)

This PR changes skyvault/api-report/skyflow.api.json (the approved public API contract for skyflow). Review the surface change below:

diff --git a/skyvault/api-report/skyflow.api.json b/skyvault/api-report/skyflow.api.json
index fe322ff..99d845c 100644
--- a/skyvault/api-report/skyflow.api.json
+++ b/skyvault/api-report/skyflow.api.json
@@ -38,6 +38,30 @@
   "skyflow.utils.enums.DeidentificationType.MASK": "attr = 'MASK'",
   "skyflow.utils.enums.DeidentificationType.UNKNOWN": "attr = 'UNKNOWN'",
   "skyflow.utils.enums.DeidentificationType.VAULT_TOKEN": "attr = 'VAULT_TOKEN'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat": "class (Enum)",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.BMP": "attr = 'bmp'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.CSV": "attr = 'csv'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.DCM": "attr = 'dcm'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.DOC": "attr = 'doc'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.DOCX": "attr = 'docx'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.GIF": "attr = 'gif'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JPEG": "attr = 'jpeg'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JPG": "attr = 'jpg'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JSON": "attr = 'json'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JSONL": "attr = 'jsonl'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.MP3": "attr = 'mp3'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PDF": "attr = 'pdf'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PNG": "attr = 'png'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PPT": "attr = 'ppt'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PPTX": "attr = 'pptx'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.TIF": "attr = 'tif'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.TIFF": "attr = 'tiff'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.TXT": "attr = 'txt'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.WAV": "attr = 'wav'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.XLS": "attr = 'xls'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.XLSX": "attr = 'xlsx'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.XML": "attr = 'xml'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.ZIP": "attr = 'zip'",
   "skyflow.utils.enums.DeidentifySourceType": "class (Enum)",
   "skyflow.utils.enums.DeidentifySourceType.BASE64": "attr = 'BASE64'",
   "skyflow.utils.enums.DeidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
@@ -207,30 +231,6 @@
   "skyflow.utils.enums.EnvUrls.PROD": "attr = 'vault.skyflowapis.com'",
   "skyflow.utils.enums.EnvUrls.SANDBOX": "attr = 'vault.skyflowapis-preview.com'",
   "skyflow.utils.enums.EnvUrls.STAGE": "attr = 'vault.skyflowapis.tech'",
-  "skyflow.utils.enums.FileDataFormat": "class (Enum)",
-  "skyflow.utils.enums.FileDataFormat.BMP": "attr = 'bmp'",
-  "skyflow.utils.enums.FileDataFormat.CSV": "attr = 'csv'",
-  "skyflow.utils.enums.FileDataFormat.DCM": "attr = 'dcm'",
-  "skyflow.utils.enums.FileDataFormat.DOC": "attr = 'doc'",
-  "skyflow.utils.enums.FileDataFormat.DOCX": "attr = 'docx'",
-  "skyflow.utils.enums.FileDataFormat.GIF": "attr = 'gif'",
-  "skyflow.utils.enums.FileDataFormat.JPEG": "attr = 'jpeg'",
-  "skyflow.utils.enums.FileDataFormat.JPG": "attr = 'jpg'",
-  "skyflow.utils.enums.FileDataFormat.JSON": "attr = 'json'",
-  "skyflow.utils.enums.FileDataFormat.JSONL": "attr = 'jsonl'",
-  "skyflow.utils.enums.FileDataFormat.MP3": "attr = 'mp3'",
-  "skyflow.utils.enums.FileDataFormat.PDF": "attr = 'pdf'",
-  "skyflow.utils.enums.FileDataFormat.PNG": "attr = 'png'",
-  "skyflow.utils.enums.FileDataFormat.PPT": "attr = 'ppt'",
-  "skyflow.utils.enums.FileDataFormat.PPTX": "attr = 'pptx'",
-  "skyflow.utils.enums.FileDataFormat.TIF": "attr = 'tif'",
-  "skyflow.utils.enums.FileDataFormat.TIFF": "attr = 'tiff'",
-  "skyflow.utils.enums.FileDataFormat.TXT": "attr = 'txt'",
-  "skyflow.utils.enums.FileDataFormat.WAV": "attr = 'wav'",
-  "skyflow.utils.enums.FileDataFormat.XLS": "attr = 'xls'",
-  "skyflow.utils.enums.FileDataFormat.XLSX": "attr = 'xlsx'",
-  "skyflow.utils.enums.FileDataFormat.XML": "attr = 'xml'",
-  "skyflow.utils.enums.FileDataFormat.ZIP": "attr = 'zip'",
   "skyflow.utils.enums.GuardrailsValidation": "class (Enum)",
   "skyflow.utils.enums.GuardrailsValidation.FAILED": "attr = 'FAILED'",
   "skyflow.utils.enums.GuardrailsValidation.PASSED": "attr = 'PASSED'",
@@ -274,6 +274,15 @@
   "skyflow.utils.enums.RedactionType.MASKED": "attr = 'MASKED'",
   "skyflow.utils.enums.RedactionType.PLAIN_TEXT": "attr = 'PLAIN_TEXT'",
   "skyflow.utils.enums.RedactionType.REDACTED": "attr = 'REDACTED'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat": "class (Enum)",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.CSV": "attr = 'csv'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.DOCX": "attr = 'docx'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.JSON": "attr = 'json'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.JSONL": "attr = 'jsonl'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.PPTX": "attr = 'pptx'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.TXT": "attr = 'txt'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.XLSX": "attr = 'xlsx'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.XML": "attr = 'xml'",
   "skyflow.utils.enums.ReidentifySourceType": "class (Enum)",
   "skyflow.utils.enums.ReidentifySourceType.BASE64": "attr = 'BASE64'",
   "skyflow.utils.enums.ReidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
@@ -416,6 +425,7 @@
   "skyflow.vault.detect.RedactionLevel.__init__": "def (self, entity_name: EntityType = None, redaction_type: RedactionType = None)",
   "skyflow.vault.detect.RedactionLevel.entity_name": "attr",
   "skyflow.vault.detect.RedactionLevel.redaction_type": "attr",
+  "skyflow.vault.detect.ReidentifyFileOutput": "alias -> common.vault.detect.ReidentifyFileOutput",
   "skyflow.vault.detect.ReidentifyFileRequest": "alias -> common.vault.detect.ReidentifyFileRequest",
   "skyflow.vault.detect.ReidentifyFileResponse": "alias -> common.vault.detect.ReidentifyFileResponse",
   "skyflow.vault.detect.ReidentifyStringRequest": "alias -> common.vault.detect.ReidentifyStringRequest",

@github-actions

Copy link
Copy Markdown

Public API contract change (flowvault)

This PR changes flowvault/api-report/skyflow.api.json (the approved public API contract for skyflow). Review the surface change below:

diff --git a/flowvault/api-report/skyflow.api.json b/flowvault/api-report/skyflow.api.json
index 60eaa0d..335f827 100644
--- a/flowvault/api-report/skyflow.api.json
+++ b/flowvault/api-report/skyflow.api.json
@@ -35,6 +35,30 @@
   "skyflow.utils.enums.DeidentificationType.MASK": "attr = 'MASK'",
   "skyflow.utils.enums.DeidentificationType.UNKNOWN": "attr = 'UNKNOWN'",
   "skyflow.utils.enums.DeidentificationType.VAULT_TOKEN": "attr = 'VAULT_TOKEN'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat": "class (Enum)",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.BMP": "attr = 'bmp'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.CSV": "attr = 'csv'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.DCM": "attr = 'dcm'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.DOC": "attr = 'doc'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.DOCX": "attr = 'docx'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.GIF": "attr = 'gif'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JPEG": "attr = 'jpeg'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JPG": "attr = 'jpg'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JSON": "attr = 'json'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.JSONL": "attr = 'jsonl'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.MP3": "attr = 'mp3'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PDF": "attr = 'pdf'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PNG": "attr = 'png'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PPT": "attr = 'ppt'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.PPTX": "attr = 'pptx'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.TIF": "attr = 'tif'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.TIFF": "attr = 'tiff'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.TXT": "attr = 'txt'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.WAV": "attr = 'wav'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.XLS": "attr = 'xls'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.XLSX": "attr = 'xlsx'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.XML": "attr = 'xml'",
+  "skyflow.utils.enums.DeidentifyFileDataFormat.ZIP": "attr = 'zip'",
   "skyflow.utils.enums.DeidentifySourceType": "class (Enum)",
   "skyflow.utils.enums.DeidentifySourceType.BASE64": "attr = 'BASE64'",
   "skyflow.utils.enums.DeidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
@@ -121,30 +145,6 @@
   "skyflow.utils.enums.EnvUrls.PROD": "attr = 'skyvault.skyflowapis.com'",
   "skyflow.utils.enums.EnvUrls.SANDBOX": "attr = 'skyvault.skyflowapis-preview.com'",
   "skyflow.utils.enums.EnvUrls.STAGE": "attr = 'skyvault.skyflowapis.tech'",
-  "skyflow.utils.enums.FileDataFormat": "class (Enum)",
-  "skyflow.utils.enums.FileDataFormat.BMP": "attr = 'bmp'",
-  "skyflow.utils.enums.FileDataFormat.CSV": "attr = 'csv'",
-  "skyflow.utils.enums.FileDataFormat.DCM": "attr = 'dcm'",
-  "skyflow.utils.enums.FileDataFormat.DOC": "attr = 'doc'",
-  "skyflow.utils.enums.FileDataFormat.DOCX": "attr = 'docx'",
-  "skyflow.utils.enums.FileDataFormat.GIF": "attr = 'gif'",
-  "skyflow.utils.enums.FileDataFormat.JPEG": "attr = 'jpeg'",
-  "skyflow.utils.enums.FileDataFormat.JPG": "attr = 'jpg'",
-  "skyflow.utils.enums.FileDataFormat.JSON": "attr = 'json'",
-  "skyflow.utils.enums.FileDataFormat.JSONL": "attr = 'jsonl'",
-  "skyflow.utils.enums.FileDataFormat.MP3": "attr = 'mp3'",
-  "skyflow.utils.enums.FileDataFormat.PDF": "attr = 'pdf'",
-  "skyflow.utils.enums.FileDataFormat.PNG": "attr = 'png'",
-  "skyflow.utils.enums.FileDataFormat.PPT": "attr = 'ppt'",
-  "skyflow.utils.enums.FileDataFormat.PPTX": "attr = 'pptx'",
-  "skyflow.utils.enums.FileDataFormat.TIF": "attr = 'tif'",
-  "skyflow.utils.enums.FileDataFormat.TIFF": "attr = 'tiff'",
-  "skyflow.utils.enums.FileDataFormat.TXT": "attr = 'txt'",
-  "skyflow.utils.enums.FileDataFormat.WAV": "attr = 'wav'",
-  "skyflow.utils.enums.FileDataFormat.XLS": "attr = 'xls'",
-  "skyflow.utils.enums.FileDataFormat.XLSX": "attr = 'xlsx'",
-  "skyflow.utils.enums.FileDataFormat.XML": "attr = 'xml'",
-  "skyflow.utils.enums.FileDataFormat.ZIP": "attr = 'zip'",
   "skyflow.utils.enums.FileUploadStatus": "class (Enum)",
   "skyflow.utils.enums.FileUploadStatus.FAILED": "attr = 'FAILED'",
   "skyflow.utils.enums.FileUploadStatus.SKIPPED": "attr = 'SKIPPED'",
@@ -186,6 +186,15 @@
   "skyflow.utils.enums.RedactionType.MASKED": "attr = 'MASKED'",
   "skyflow.utils.enums.RedactionType.PLAIN_TEXT": "attr = 'PLAIN_TEXT'",
   "skyflow.utils.enums.RedactionType.REDACTED": "attr = 'REDACTED'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat": "class (Enum)",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.CSV": "attr = 'csv'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.DOCX": "attr = 'docx'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.JSON": "attr = 'json'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.JSONL": "attr = 'jsonl'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.PPTX": "attr = 'pptx'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.TXT": "attr = 'txt'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.XLSX": "attr = 'xlsx'",
+  "skyflow.utils.enums.ReidentifyFileDataFormat.XML": "attr = 'xml'",
   "skyflow.utils.enums.ReidentifySourceType": "class (Enum)",
   "skyflow.utils.enums.ReidentifySourceType.BASE64": "attr = 'BASE64'",
   "skyflow.utils.enums.ReidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
@@ -484,6 +493,7 @@
   "skyflow.vault.detect.RedactionLevel.__init__": "def (self, token_group_name: str = None, redaction_pattern: str = None)",
   "skyflow.vault.detect.RedactionLevel.redaction_pattern": "attr",
   "skyflow.vault.detect.RedactionLevel.token_group_name": "attr",
+  "skyflow.vault.detect.ReidentifyFileOutput": "alias -> common.vault.detect.ReidentifyFileOutput",
   "skyflow.vault.detect.ReidentifyFileRequest": "alias -> common.vault.detect.ReidentifyFileRequest",
   "skyflow.vault.detect.ReidentifyFileResponse": "alias -> common.vault.detect.ReidentifyFileResponse",
   "skyflow.vault.detect.ReidentifyStringRequest": "alias -> common.vault.detect.ReidentifyStringRequest",

@saileshwar-skyflow
saileshwar-skyflow merged commit baebace into flowvault-release/26.10.0 Nov 11, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants