Skip to main content

purra-interaction · Python

English | 简体中文

Persist structured questions, wait for user input, and continue execution. Requires Python 3.11+.

API Use
SqliteClarification Suspend and resume the same Run using purra-sqlite checkpoints
ClarificationStore + ClarificationWorkflow Collect input before execution, then create a Run through an application callback

Install

For same-Run clarification, run from the repository root:

python -m pip install . ./integrations/sqlite/python './integrations/interaction/python[sqlite]'

Configure a Run

Given a model gateway:

from purra.api import AgentCore, AgentPreset
from purra.contracts import RuntimeLimits
from purra.tools import InMemoryToolCatalog
from purra_sqlite import SqliteAgentAdapters
from purra_interaction import SqliteClarification

storage = SqliteAgentAdapters("agent.db", scope="user-1/project-1")
interaction = SqliteClarification(storage)
core = AgentCore(
    model_gateway=gateway,
    preset=AgentPreset(
        id="assistant", revision="1",
        runtime_limits=RuntimeLimits(max_run_generation_tokens=8192),
        tool_catalog=InMemoryToolCatalog((interaction.registration,)),
    ),
    run_repository=storage.runs,
    output_repository=storage.outputs,
    output_publisher=storage.publisher,
    execution_lease_store=storage.leases,
)

Submit an AgentRunRequest with tools_enabled=True through await interaction.submit(core, request). When the Agent asks a question, handle.wait() raises purra.api.UserInputRequired. Use its request_id with await interaction.get(request_id) to obtain the public question data.

The Run remains waiting, with no worker or model call kept alive. After the user answers, provide the question revision, a stable command key, and answers keyed by question ID:

async def answer_and_resume(request_id, revision, answer_key, answers):
    ready = await interaction.answer(
        request_id, revision=revision, key=answer_key, answers=answers,
    )
    return await interaction.resume(core, ready["id"])

The returned handle continues the same Run with its spent budget and deadline. It may request input again. Answers provide task data and do not grant tool permissions.

Reload and cancel

Recreate the same storage, Agent preset, gateway, and interaction objects after restart. list_pending() includes waiting and answered requests; resume those in ready state. Use cancel(request_id) while waiting, or the Run handle after execution resumes.

For Agent trees, bind the same Run-tree repository and answer all pending questions under a Root before resuming. Auto, Reactive, and Planned execution are supported. Pauses occur at completed tool-round boundaries. Uncertain external writes require reconciliation. Close Core before closing storage.

Pre-execution input

ClarificationStore.ask(...) saves questions and an application checkpoint. Expose store.public(saved) to the UI, then call store.answer(...). ClarificationWorkflow.resume(..., submit=callback) invokes callback(snapshot, continuation_key) to create a new Run and return its ID.

Persist the continuation key on that Run. If submission is interrupted, reconcile against the existing Run before retrying. The application restores credentials, permissions, and remaining task budgets. Close the store on shutdown.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

purra_interaction-0.5.1.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

purra_interaction-0.5.1-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file purra_interaction-0.5.1.tar.gz.

File metadata

  • Download URL: purra_interaction-0.5.1.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for purra_interaction-0.5.1.tar.gz
Algorithm Hash digest
SHA256 094b43e264df7ad636d3fd891fedd9bd0ca441edb193a480b53b7a0fae0cf77f
MD5 419edf2fcd00cef8e5a3ef0b9aeece28
BLAKE2b-256 fdc7528c64b87333e219448a381d710f3f700e5128b9ce5141946485a7686a36

See more details on using hashes here.

Provenance

The following attestation bundles were made for purra_interaction-0.5.1.tar.gz:

Publisher: release.yml on Lybrands/purra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file purra_interaction-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for purra_interaction-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 516f9b30bf1fde4f0eebc8436741d5be3a7eddb32981a7ed12a83553f0f4555a
MD5 6c3633347f1dde76ed50cd53669587e3
BLAKE2b-256 e312e8b5225d456f777fc86d3dbd5dd2396424ae89c7122242c18598404f397b

See more details on using hashes here.

Provenance

The following attestation bundles were made for purra_interaction-0.5.1-py3-none-any.whl:

Publisher: release.yml on Lybrands/purra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.5.1 This release

2 files

0.5.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page