Python SDK for Perceptic Workflow definitions - cross-language Temporal workflow types
Project description
Perceptic Workflow SDK
Python SDK for Perceptic Workflow definitions. This package provides cross-language Temporal workflow types that are compatible with the Java workflow definitions in perceptic-core-client.
Installation
uv add perceptic-workflow-sdk
Usage
Runtime Input Contract
Workflows started through Perceptic Core receive a typed envelope:
AgentInput[T]where:run_rididentifies the runuser_ididentifies the authenticated callerpayloadcontains your workflow-specific input modelT
On the wire, Perceptic Core sends camelCase (runRid, userId, payload). In Python, use snake_case (run_rid, user_id, payload) per PEP 8. The SDK handles alias mapping automatically.
Workflow Events
from perceptic_workflow import (
WorkflowEvent,
InfoEvent,
CheckpointEvent,
UserInputEvent,
UserInputRequestEvent,
WorkflowCheckpointStatus,
)
# Create events
info_event = InfoEvent(
event_id=1,
type="progress",
payload={"step": "processing"},
timestamp=datetime.now()
)
Implementing Workflows
The SDK provides a mixin class for implementing Perceptic-compatible workflows:
from pydantic import BaseModel
from temporalio import workflow
from perceptic_workflow import AgentInput, PercepticWorkflowMixin, WorkflowEvent
class ResearchInput(BaseModel):
query: str
context: str
@workflow.defn
class MyWorkflow(PercepticWorkflowMixin):
def __init__(self):
self._events: list[WorkflowEvent] = []
self._paused = False
@workflow.run
async def run(self, input: AgentInput[ResearchInput]) -> dict:
# Envelope fields use snake_case in Python.
run_rid = input.run_rid
user_id = input.user_id
request = input.payload
if request is None:
raise ValueError("payload is required")
return {
"runRid": run_rid,
"userId": user_id,
"query": request.query,
"context": request.context,
}
@workflow.update(name=PercepticWorkflowMixin.UPDATE_SUBMIT_USER_INPUT)
async def submit_user_input(self, inputs: dict) -> None:
self._paused = False
# Handle user input
@workflow.update(name=PercepticWorkflowMixin.UPDATE_INTERRUPT)
async def interrupt(self, reason: str) -> None:
# Handle interruption
pass
@workflow.query(name=PercepticWorkflowMixin.QUERY_IS_PAUSED)
def is_paused(self) -> bool:
return self._paused
@workflow.query(name=PercepticWorkflowMixin.QUERY_GET_EVENTS)
def get_events(self, after_event_id: int | None = None) -> list[WorkflowEvent]:
if after_event_id is None:
return self._events
return [e for e in self._events if e.event_id > after_event_id]
Decorator Validation
PercepticWorkflowMixin validates required Temporal handlers at class definition time.
If any required method is missing a decorator, uses the wrong decorator kind, or uses
the wrong reserved handler name, class creation raises TypeError.
Example error shape:
TypeError: MyWorkflow must implement Perceptic workflow handlers with the required Temporal decorators:
- Method 'submit_user_input' is not decorated with a Temporal handler. Expected @workflow.update(name=MyWorkflow.UPDATE_SUBMIT_USER_INPUT)
For static feedback before runtime, run type checks and the mixin checker together:
uv run ty check
uv run workflow-typecheck
Troubleshooting
ValidationError: Field required ... run_rid/user_idduring workflow activation usually means your@workflow.runsignature expects the wrong shape.- Use
AgentInput[YourPayloadModel]for the first workflow argument, not a flattened domain model. - For run-start requests, send
runRidandinputs;userIdis derived from auth context by Perceptic Core.
Compatibility
This package is designed to be compatible with:
- perceptic-core-client (Java)
- perceptic-core-workflow-runtime (Java)
The workflow definitions and event types are generated from the same JSON Schema sources to ensure cross-language compatibility.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file perceptic_workflow_sdk-0.50.97.tar.gz.
File metadata
- Download URL: perceptic_workflow_sdk-0.50.97.tar.gz
- Upload date:
- Size: 7.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a73741c340b24ab3377321b9c9a2a205e9c7f9d7a76b113d737fa72dd10b4f53
|
|
| MD5 |
ea6af1db33198132db7791276c8a3d1a
|
|
| BLAKE2b-256 |
c1382deca06dca54a004ce14e39e778c3ceba415afee5abb85b51e4cc1d6384b
|
Provenance
The following attestation bundles were made for perceptic_workflow_sdk-0.50.97.tar.gz:
Publisher:
publish-python.yml on perceptic/perceptic-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
perceptic_workflow_sdk-0.50.97.tar.gz -
Subject digest:
a73741c340b24ab3377321b9c9a2a205e9c7f9d7a76b113d737fa72dd10b4f53 - Sigstore transparency entry: 957807242
- Sigstore integration time:
-
Permalink:
perceptic/perceptic-core@34471738a58adb9bf495870eb8c7dc4454b056be -
Branch / Tag:
refs/tags/0.50.97 - Owner: https://github.com/perceptic
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@34471738a58adb9bf495870eb8c7dc4454b056be -
Trigger Event:
push
-
Statement type:
File details
Details for the file perceptic_workflow_sdk-0.50.97-py3-none-any.whl.
File metadata
- Download URL: perceptic_workflow_sdk-0.50.97-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c055e5534c33dc78f63e894baa7d324144e96961b7ab0f5036114cbb14df185
|
|
| MD5 |
4125d5f84c1bafa75de94f3928b34803
|
|
| BLAKE2b-256 |
f8274f7fcd6916aaa2653ae1fb5a7c2b28f71479fa4b906d2f85e8cf87922b5f
|
Provenance
The following attestation bundles were made for perceptic_workflow_sdk-0.50.97-py3-none-any.whl:
Publisher:
publish-python.yml on perceptic/perceptic-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
perceptic_workflow_sdk-0.50.97-py3-none-any.whl -
Subject digest:
6c055e5534c33dc78f63e894baa7d324144e96961b7ab0f5036114cbb14df185 - Sigstore transparency entry: 957807272
- Sigstore integration time:
-
Permalink:
perceptic/perceptic-core@34471738a58adb9bf495870eb8c7dc4454b056be -
Branch / Tag:
refs/tags/0.50.97 - Owner: https://github.com/perceptic
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@34471738a58adb9bf495870eb8c7dc4454b056be -
Trigger Event:
push
-
Statement type: