The Seekr Python Library is the official Python client for SeekrFlow's API platform, providing a convenient way for interacting with the REST APIs and enables easy integrations with Python 3.9+ applications with easy to use synchronous and asynchronous clients.
Installation
To install Seekr Python Library from PyPi, simply run:
pip install --upgrade seekrai
Setting up API Key
🚧 You will need to create an account with Seekr.com to obtain a SeekrFlow API Key.
Setting environment variable
export SEEKR_API_KEY=xxxxx
Using the client
from seekrai import SeekrFlow
with SeekrFlow(api_key="xxxxx") as client:
response = client.models.list()
print(response.data)
Client lifecycle and connection reuse
SeekrFlow and AsyncSeekrFlow reuse an internal HTTP client per SDK client instance.
Recommended usage:
- Create one SDK client per app scope or per cached user scope (not per request).
- Reuse that SDK client for all calls in that scope.
- Close the SDK client on shutdown/eviction (
close()oraclose()), or use context managers (with/async with).
If you already manage your own httpx.Client / httpx.AsyncClient or need custom pool settings, etc, inject it via
http_client= or async_http_client= and keep lifecycle ownership in your app.
import httpx
from seekrai import SeekrFlow
shared_http_client = httpx.Client(
http2=True,
limits=httpx.Limits(max_connections=200, max_keepalive_connections=100),
)
try:
client = SeekrFlow(api_key="xxxxx", http_client=shared_http_client)
# ... reuse client across calls
finally:
shared_http_client.close()
Per-user SDK cache (recommended pattern)
If your app caches one SDK client per user, use a shared HTTP transport for all cached SDK instances. This avoids one connection pool per user and keeps socket/FD usage bounded by one global pool.
import httpx
from cachetools import TTLCache
from seekrai import SeekrFlow
shared_http_client = httpx.Client(
http2=True,
limits=httpx.Limits(max_connections=300, max_keepalive_connections=100),
)
sdk_cache: TTLCache[str, SeekrFlow] = TTLCache(maxsize=5000, ttl=900)
def get_user_client(user_id: str, api_key: str) -> SeekrFlow:
client = sdk_cache.get(user_id)
if client is None:
client = SeekrFlow(api_key=api_key, http_client=shared_http_client)
sdk_cache[user_id] = client
return client
def shutdown() -> None:
# SDK clients do not own injected transport.
shared_http_client.close()
Apply the same pattern for async apps with one shared httpx.AsyncClient injected
into cached AsyncSeekrFlow instances, and close it once during app shutdown.
RBAC Team Routing
Every API key currently resolves to a personal team. We do not currently have application-level or shared team-level API keys.
The SDK can send the RBAC context header x-team-id when provided. This header
does not grant access by itself.
Authorization is enforced server-side using the authenticated identity (API key/JWT). A request is only allowed if that identity has access to the requested team. If no team context is provided, the backend defaults to the personal team resolved from authentication.
You can set team context in either of these ways:
- Set
SEEKR_TEAM_IDand let the SDK populatex-team-idautomatically. - Pass
supplied_headers={"x-team-id": "..."}explicitly.
If both are provided, supplied_headers["x-team-id"] takes precedence.
import os
from seekrai import SeekrFlow
with SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY")) as client:
response = client.models.list()
print(response.data)
import os
import asyncio
from seekrai import AsyncSeekrFlow
async def run():
async with AsyncSeekrFlow(
api_key=os.environ.get("SEEKR_API_KEY"),
supplied_headers={"x-team-id": os.environ.get("SEEKR_TEAM_ID")},
) as async_client:
response = await async_client.models.list()
print(response.data)
asyncio.run(run())
Usage – Python Client
Chat Completions
import os
from seekrai import SeekrFlow
with SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY")) as client:
response = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "tell me about new york"}],
)
print(response.choices[0].message.content)
Streaming
import os
from seekrai import SeekrFlow
with SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY")) as client:
stream = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "tell me about new york"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
Async usage
import os, asyncio
from seekrai import AsyncSeekrFlow
messages = [
"What are the top things to do in San Francisco?",
"What country is Paris in?",
]
async def async_chat_completion(messages):
async with AsyncSeekrFlow(api_key=os.environ.get("SEEKR_API_KEY")) as async_client:
tasks = [
async_client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": message}],
)
for message in messages
]
responses = await asyncio.gather(*tasks)
for response in responses:
print(response.choices[0].message.content)
asyncio.run(async_chat_completion(messages))
Files
The files API is used for fine-tuning and allows developers to upload data to fine-tune on. It also has several methods to list all files, retrieve files, and delete files
import os
from seekrai import SeekrFlow
with SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY")) as client:
client.files.upload(file="somedata.parquet") # uploads a file
client.files.list() # lists all uploaded files
client.files.delete(id="file-d0d318cb-b7d9-493a-bd70-1cfe089d3815") # deletes a file
Fine-tunes
The finetune API is used for fine-tuning and allows developers to create finetuning jobs. It also has several methods to list all jobs, retrieve statuses and get checkpoints.
import os
from seekrai import SeekrFlow
with SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY")) as client:
client.fine_tuning.create(
training_file='file-d0d318cb-b7d9-493a-bd70-1cfe089d3815',
model='meta-llama/Llama-3.1-8B-Instruct',
n_epochs=3,
n_checkpoints=1,
batch_size=4,
learning_rate=1e-5,
suffix='my-demo-finetune',
)
client.fine_tuning.list() # lists all fine-tuned jobs
client.fine_tuning.retrieve(id="ft-c66a5c18-1d6d-43c9-94bd-32d756425b4b") # retrieves information on finetune event
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 seekrai-0.34.0.tar.gz.
File metadata
- Download URL: seekrai-0.34.0.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7c4c04c43d5c6969f958d1f22eccd77722571c86f98a28158ec88b0a0a7d701
|
|
| MD5 |
66e2b3ee325d8f81f08328e836cbd738
|
|
| BLAKE2b-256 |
2de5553ac4c4949978998751248fe0ffe9196751115609ebc12b22d68a89f866
|
File details
Details for the file seekrai-0.34.0-py3-none-any.whl.
File metadata
- Download URL: seekrai-0.34.0-py3-none-any.whl
- Upload date:
- Size: 107.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f969e44049f5fe37ddce6ace7ad22f3a82c274848bda901c91a2491462dc58d0
|
|
| MD5 |
cbd0c0c7577f59f5d9161cadbb32420a
|
|
| BLAKE2b-256 |
7db75effa727097de6b032facc1d46d2e32ba147e8a5425f20c4eee44b2d71d0
|