Skip to main content

Seclai Python SDK

Project description

Seclai Python SDK

This is the official Seclai Python SDK.

Install

pip3 install seclai

Quickstart

Authentication

Provide your API key either:

  • explicitly: Seclai(api_key="..."), or
  • via environment variable: SECLAI_API_KEY

Sync client

from seclai import Seclai

client = Seclai(api_key="...")

# Low-level request (escape hatch)
sources = client.request("GET", "/sources/")
print(sources)

Async client

import asyncio

from seclai import AsyncSeclai


async def main() -> None:
	async with AsyncSeclai(api_key="...") as client:
		sources = await client.request("GET", "/sources/")
		print(sources)


asyncio.run(main())

Common examples

Run an agent

from seclai import Seclai
from seclai._generated.models.agent_run_request import AgentRunRequest

client = Seclai(api_key="...")

run = client.run_agent(
	"11111111-1111-4111-8111-111111111111",
	body=AgentRunRequest(
		input_="Hello from the Seclai Python SDK!",
		metadata={
            "app": "My App"
        },
	),
)

print(run)

Run an agent with SSE streaming (wait for final result)

This helper returns when the stream emits the final done event. It raises if the stream ends early or timeout is reached.

from seclai import Seclai

client = Seclai(api_key="...")

run = client.run_streaming_agent_and_wait(
	"11111111-1111-4111-8111-111111111111",
	body={
		"input": "Hello from streaming",
		"metadata": {"app": "My App"},
	},
	timeout=60.0,
)

print(run)

Async:

import asyncio

from seclai import AsyncSeclai


async def main() -> None:
	async with AsyncSeclai(api_key="...") as client:
		run = await client.run_streaming_agent_and_wait(
			"11111111-1111-4111-8111-111111111111",
			body={"input": "Hello from streaming"},
			timeout=60.0,
		)
		print(run)


asyncio.run(main())

Get agent run details

Get details of a specific agent run, optionally including per-step outputs:

from seclai import Seclai

client = Seclai(api_key="...")

# Basic details
run = client.get_agent_run(
	"22222222-2222-4222-8222-222222222222",
)
print(run)

# Include per-step outputs with timing, durations, and credits
run = client.get_agent_run(
	"22222222-2222-4222-8222-222222222222",
	include_step_outputs=True,
)
print(run)

List sources

from seclai import Seclai

client = Seclai(api_key="...")

sources = client.list_sources(page=1, limit=20)
print(sources)

Upload a file to a source

You can upload either a filesystem path or bytes.

Max file size: 200 MiB.

Supported MIME types:

  • application/epub+zip
  • application/json
  • application/msword
  • application/pdf
  • application/vnd.ms-excel
  • application/vnd.ms-outlook
  • application/vnd.ms-powerpoint
  • application/vnd.openxmlformats-officedocument.presentationml.presentation
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • application/vnd.openxmlformats-officedocument.wordprocessingml.document
  • application/xml
  • application/zip
  • audio/flac, audio/mp4, audio/mpeg, audio/ogg, audio/wav
  • image/bmp, image/gif, image/jpeg, image/png, image/tiff, image/webp
  • text/csv, text/html, text/markdown, text/x-markdown, text/plain, text/xml
  • video/mp4, video/quicktime, video/x-msvideo

If the upload is sent as application/octet-stream, the server attempts to infer the type from the file extension.

from seclai import Seclai

client = Seclai(api_key="...")

# Upload from path
resp = client.upload_file_to_source(
	"22222222-2222-4222-8222-222222222222",
	file="./document.pdf",
	title="Example document",
	metadata={"category": "docs", "author": "Ada"},
)
print(resp)
from seclai import Seclai

client = Seclai(api_key="...")

# Upload from bytes
resp = client.upload_file_to_source(
	"22222222-2222-4222-8222-222222222222",
	file=b"hello world",
	file_name="hello.txt",
	mime_type="text/plain",
	metadata={"category": "examples"},
)
print(resp)

### Replace an existing content version (upload a new file)

To replace the file backing an existing content version, upload a new file to `/contents/{source_connection_content_version}/upload`:

```python
from seclai import Seclai

client = Seclai(api_key="...")

resp = client.upload_file_to_content(
	"sc_cv_123",
	file="./updated.pdf",
	metadata={"revision": 2},
)

print(resp)

## Error handling

Typed convenience methods raise exceptions for non-success responses.

```python
from seclai import Seclai, SeclaiAPIStatusError

client = Seclai(api_key="...")

try:
	sources = client.list_sources()
except SeclaiAPIStatusError as e:
	print("Request failed:")
	print("status:", e.status_code)
	print("method:", e.method)
	print("url:", e.url)
	print("body:", e.response_text)
	raise

Configuration

Timeouts and headers

from seclai import Seclai

client = Seclai(
	api_key="...",
	timeout=30.0,
	default_headers={"x-my-app": "my-service"},
)

Development

Base URL

Set SECLAI_API_URL to point at a different API host (e.g., staging):

export SECLAI_API_URL="https://example.invalid"

Testing

make test

To pass args through to pytest:

make test ARGS='-k auth'

Formatting

make format

Linting

make lint

API documentation

Online API documentation (latest):

https://seclai.github.io/seclai-python/1.0.6/

Generate HTML docs into build/docs/:

make docs

OpenAPI spec & regenerating the client

Copy the OpenAPI JSON file into openapi/seclai.openapi.json, then run:

make generate

Reporting issues

If you hit a bug or have a feature request, please open an issue and include:

  • what you were trying to do
  • a minimal repro snippet (if possible)
  • the exception / traceback
  • your environment (Python version, OS)

Contributing

Contributions are welcome.

  • Keep changes focused and add/adjust tests where appropriate.
  • Run make lint and make test before opening a PR.

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

seclai-1.0.6.tar.gz (119.3 kB view details)

Uploaded Source

Built Distribution

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

seclai-1.0.6-py3-none-any.whl (321.7 kB view details)

Uploaded Python 3

File details

Details for the file seclai-1.0.6.tar.gz.

File metadata

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

File hashes

Hashes for seclai-1.0.6.tar.gz
Algorithm Hash digest
SHA256 4bda42d25a1ef44bcd882c5162ddbd8515a59277015c7802dcc4bb79ba4ca845
MD5 0b4346ae66c3b5f33a2b2d4cb9315384
BLAKE2b-256 d6ae5644f17f66a676650d8c0523dd83121fa556e1651f4cee3561531759acfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for seclai-1.0.6.tar.gz:

Publisher: main-build.yaml on seclai/seclai-python

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

File details

Details for the file seclai-1.0.6-py3-none-any.whl.

File metadata

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

File hashes

Hashes for seclai-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 68456f5b3f42ce523f7042b24053cba96e5eb06e3e4b62d7462ae4991ddf796c
MD5 da476edc98080efeb1b79664379d54e9
BLAKE2b-256 5ba184eae80d324673c02ea5ddb70f85805519889c7216e7bcd04fa750638b49

See more details on using hashes here.

Provenance

The following attestation bundles were made for seclai-1.0.6-py3-none-any.whl:

Publisher: main-build.yaml on seclai/seclai-python

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