Skip to main content

Official Python SDK for Kraken document processing API

Project description

Kraken SDK for Python

Official Python SDK for the public Kraken API exposed through PCS/Stratios.

Requirements

  • Python 3.9 or higher
  • httpx for HTTP requests
  • pydantic for data validation

Installation

pip install kraken-sdk

Or install from source:

git clone https://github.com/Capt-IA/Kraken-SDK.git
cd Kraken-SDK/kraken-sdk-python
pip install -e .

Public architecture

The supported public flow is:

  1. client application → PCS/Stratios
  2. PCS verifies the API key and injects signed platform context
  3. PCS proxies the request to Kraken

By default, the SDK therefore prefixes requests with /services/kraken.

Quick Start

from kraken_sdk import KrakenClient
from kraken_sdk.types import ExtractionTaskRequest

client = KrakenClient(
    api_key="your-api-key",
    base_url="https://pcs.example.com",
)

source = client.sources.upload("invoice.pdf")

# Read service metadata through PCS
info = client.info.info()
print(info.service, info.version)

source = client.sources.upload("path/to/document.pdf")
print(f"Uploaded: {source.id}")

job = client.jobs.create_single(
    ExtractionTaskRequest(
        task_type="extraction",
        source_id=source.id,
        ai_provider="openai",
        provider_model="gpt-4o",
    )
)

result = client.jobs.wait(job.job_id)
tasks = client.jobs.tasks(job.job_id)
print(result.status)
print(tasks.tasks[0].status)

Async Support

The SDK provides full async support:

import asyncio
from kraken_sdk import AsyncKrakenClient
from kraken_sdk.types import ExtractionTaskRequest

async def main():
    async with AsyncKrakenClient(
        api_key="your-api-key",
        base_url="https://pcs.example.com",
    ) as client:
        source = await client.sources.upload("document.pdf")
        job = await client.jobs.create_single(
            ExtractionTaskRequest(
                task_type="extraction",
                source_id=source.id,
                ai_provider="openai",
                provider_model="gpt-4o",
            )
        )
        result = await client.jobs.wait(job.job_id)
        print(result)

asyncio.run(main())

Direct internal access

Direct Kraken URLs should stay limited to internal tooling and trusted service-to-service use. If you really need it, disable PCS path prefixing explicitly:

client = KrakenClient(
    api_key="internal-key",
    base_url="https://kraken.internal.example.com",
    use_pcs_proxy=False,
)

Structured Annotation

Extract structured data using custom schemas:

from kraken_sdk import KrakenClient
from kraken_sdk.types import AnnotationTaskRequest

client = KrakenClient(
    api_key="your-api-key",
    base_url="https://pcs.example.com",
)

annotation_schema = {
    "Invoice": {
        "general_prompt": "Invoice information",
        "is_list": False,
        "is_optional": False,
        "table_fields": [
            {"class_name": "invoice_number", "type": "str", "prompt": "The invoice number"},
            {"class_name": "total_amount", "type": "str", "prompt": "The total amount"},
            {"class_name": "date", "type": "str", "prompt": "The invoice date"}
        ]
    }
}

job = client.jobs.create_single(
    AnnotationTaskRequest(
        task_type="annotation",
        source_id=source.id,
        ai_provider="openai",
        provider_model="gpt-4o",
        annotation_config={
            "annotation_schema": annotation_schema,
            "output_format": "json",
        },
    )
)

result = client.jobs.wait(job.job_id)

Bulk Processing

Process multiple documents with the same configuration:

from kraken_sdk.types import ExtractionTaskConfig

job = client.jobs.create_bulk(
    task_config=ExtractionTaskConfig(
        task_type="extraction",
        ai_provider="openai",
        provider_model="gpt-4o",
    ),
    source_ids=["source-1", "source-2", "source-3"],
)

Error Handling

from kraken_sdk.exceptions import KrakenAuthError, KrakenError, KrakenNotFoundError

try:
    result = client.jobs.get("invalid-id")
except KrakenNotFoundError:
    print("Job not found")
except KrakenAuthError:
    print("Invalid API key")
except KrakenError as e:
    print(f"API error: {e}")

API Reference

KrakenClient

Resource Methods
client.info info(), health(), tasks()
client.jobs create(), create_single(), create_bulk(), list(), get(), tasks(), wait()
client.sources upload()
client.benchmarks create(), list(), get(), report(), create_expected_result(), upload_expected_result(), get_expected_result(), list_expected_results()

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Lint
ruff check src/

Project details


Download files

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

Source Distribution

kraken_captia-0.1.4.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

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

kraken_captia-0.1.4-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file kraken_captia-0.1.4.tar.gz.

File metadata

  • Download URL: kraken_captia-0.1.4.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kraken_captia-0.1.4.tar.gz
Algorithm Hash digest
SHA256 09e2021469fcb83b01d50241d576d4d2978ea4a6c5446495cac039d95d41f46b
MD5 b8473ff488c945e9a8839104bee9d11e
BLAKE2b-256 fc41ff71375e5203fc9958b52dbfdc951783098a82b4db1a7580142e8421e464

See more details on using hashes here.

Provenance

The following attestation bundles were made for kraken_captia-0.1.4.tar.gz:

Publisher: publish.yml on Capt-IA/Kraken-SDK

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

File details

Details for the file kraken_captia-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: kraken_captia-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 25.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kraken_captia-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ad3821d4d84b71113e50f099f88df6790daff2e1f458def4e58a5dd67dc423f9
MD5 241471b75a12870716e860e783bb6e2f
BLAKE2b-256 f70c80aeadd5d8446648864e0e9c2d7f91c0f770fdeb24f85bf539745d024930

See more details on using hashes here.

Provenance

The following attestation bundles were made for kraken_captia-0.1.4-py3-none-any.whl:

Publisher: publish.yml on Capt-IA/Kraken-SDK

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page