Python client library for KWS Platform API
Project description
KWS Library (kwslib)
Python client library for interacting with the KWS Platform backend API.
Features
- Complete API Coverage: Wraps all backend API endpoints
- MinIO Integration: Download .wav and .npz files for training
- Telegram Notifications: Optional notifications for training jobs
- Easy to Use: Simple, intuitive API design
- Type Hints: Full type annotations for better IDE support
Installation
pip install kwslib
Or from source:
git clone <repository>
cd KWS_Lib
pip install -e .
Quick Start
Basic Usage
from kwslib import KWSClient
# Initialize client
client = KWSClient(base_url="http://localhost:8000")
# Login
client.login(username="admin", password="password")
# List datasets
datasets = client.datasets.list()
print(f"Found {datasets['total']} datasets")
# Get dataset details
dataset = client.datasets.get(dataset_id=1)
print(f"Dataset: {dataset['name']}")
Download Dataset Split Files for Training
from kwslib import KWSClient, DatasetSplitFilesClient
# Initialize API client
api = KWSClient(base_url="http://localhost:8000")
api.login(username="admin", password="password")
# Initialize files client (uses API, no direct MinIO connection)
files_client = DatasetSplitFilesClient(api)
# List all files in split
files_info = files_client.list_files(split_id=1, file_type="npz")
print(f"Found {files_info['total_files']} files")
# Download all .npz files
files_client.download_all_npz(
split_id=1,
output_dir="features"
)
# Download all .wav files
files_client.download_all_wav(
split_id=1,
output_dir="audio"
)
# Or download as ZIP
files_client.download_all_files_zip(
split_id=1,
file_type="npz",
output_path="features.zip"
)
# Get presigned URLs (for Google Colab)
urls = files_client.get_file_urls(split_id=1, file_type="npz")
for file_info in urls["files"]:
print(f"{file_info['file_name']}: {file_info['url']}")
With Telegram Notifications
from kwslib import KWSClient, TelegramNotifier
# Initialize
client = KWSClient(base_url="http://localhost:8000")
client.login(username="admin", password="password")
notifier = TelegramNotifier(
bot_token="YOUR_BOT_TOKEN",
chat_id="YOUR_CHAT_ID"
)
# Create experiment run
run = client.experiments.create_run(
experiment_id=1,
name="Training Run 1",
model_id=1,
dataset_split_id=1
)
# Wait for completion
job_id = run.get("job_id")
status = client.jobs.wait_for_completion(job_id)
# Send notification
if status["status"] == "completed":
notifier.send(f"Training completed! Results: {status['result']}")
else:
notifier.send(f"Training failed: {status.get('error')}")
API Modules
Authentication
client.auth.login()- Loginclient.auth.logout()- Logoutclient.auth.get_me()- Get current user info
Datasets
client.datasets.list()- List datasetsclient.datasets.get()- Get datasetclient.datasets.create()- Create datasetclient.datasets.update()- Update datasetclient.datasets.delete()- Delete datasetclient.datasets.list_versions()- List versionsclient.datasets.create_version()- Create version
Models
client.models.list()- List modelsclient.models.get()- Get modelclient.models.create()- Create modelclient.models.list_model_inits()- List model architectures
Experiments
client.experiments.list()- List experimentsclient.experiments.create()- Create experimentclient.experiments.create_run()- Create experiment runclient.experiments.list_runs()- List experiment runs
Dataset Splits
client.dataset_splits.list()- List splitsclient.dataset_splits.create()- Create splitclient.dataset_splits.download()- Download split as ZIPclient.dataset_splits.generate()- Generate split
Audio
client.audio.list_keyword_samples()- List keyword audioclient.audio.upload_keyword_sample()- Upload audioclient.audio.get_keyword_sample_url()- Get presigned URL
Features
client.features.get_keyword_features()- Get featuresclient.features.extract_keyword_features()- Extract features
Jobs
client.jobs.get()- Get job statusclient.jobs.list()- List jobsclient.jobs.wait_for_completion()- Wait for job completion
Dataset Split Files Client
files_client.list_files()- List all files in splitfiles_client.download_wav()- Download a .wav filefiles_client.download_npz()- Download and load a .npz filefiles_client.download_all_wav()- Download all .wav filesfiles_client.download_all_npz()- Download all .npz filesfiles_client.download_all_files_zip()- Download all files as ZIPfiles_client.get_file_urls()- Get presigned URLs for all files
Telegram Notifier
notifier.send()- Send messagenotifier.send_file()- Send filenotifier.send_photo()- Send photo
Examples
Complete Training Workflow
from kwslib import KWSClient, DatasetSplitFilesClient, TelegramNotifier
# Setup
api = KWSClient(base_url="http://localhost:8000")
api.login(username="admin", password="password")
files_client = DatasetSplitFilesClient(api)
notifier = TelegramNotifier(
bot_token="YOUR_TOKEN",
chat_id="YOUR_CHAT_ID"
)
# 1. Create dataset split
split = api.dataset_splits.create(
dataset_version_id=1,
name="train_split",
config_name="train",
seed=42,
split_option="fixed",
fixed_count=1000,
keyword_ids=[1, 2, 3]
)
split_id = split["dataset_splits_id"]
# 2. Generate split
job = api.dataset_splits.generate(split_id)
job_id = job["job_id"]
# 3. Wait for completion
status = api.jobs.wait_for_completion(job_id)
notifier.send(f"Split generation: {status['status']}")
# 4. Download features (via API, no direct MinIO access)
features_dir = f"features/split_{split_id}"
files_client.download_all_npz(
split_id=split_id,
output_dir=features_dir
)
# 5. Create experiment run
run = api.experiments.create_run(
experiment_id=1,
name="Training Run",
model_id=1,
dataset_split_id=split_id
)
notifier.send(f"Training started: {run['name']}")
Google Colab Usage
# In Google Colab, use presigned URLs for direct download
from kwslib import KWSClient, DatasetSplitFilesClient
api = KWSClient(base_url="https://your-api.com")
api.login(username="admin", password="password")
files_client = DatasetSplitFilesClient(api)
# Get presigned URLs
urls = files_client.get_file_urls(split_id=1, file_type="npz")
# Download in Colab
import urllib.request
for file_info in urls["files"]:
urllib.request.urlretrieve(
file_info["url"],
f"/content/{file_info['file_name']}"
)
Google Colab Usage
# In Google Colab, use presigned URLs for direct download
from kwslib import KWSClient, DatasetSplitFilesClient
api = KWSClient(base_url="https://your-api.com")
api.login(username="admin", password="password")
files_client = DatasetSplitFilesClient(api)
# Get presigned URLs
urls = files_client.get_file_urls(split_id=1, file_type="npz")
# Download in Colab
import urllib.request
for file_info in urls["files"]:
urllib.request.urlretrieve(
file_info["url"],
f"/content/{file_info['file_name']}"
)
Configuration
Environment Variables
You can set default values using environment variables:
export KWS_BASE_URL="http://localhost:8000"
export KWS_USERNAME="admin"
export KWS_PASSWORD="password"
export MINIO_ENDPOINT="localhost:9000"
export MINIO_ACCESS_KEY="minioadmin"
export MINIO_SECRET_KEY="minioadmin"
License
MIT License
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
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
kwslib-0.0.2.tar.gz
(20.4 kB
view details)
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
kwslib-0.0.2-py3-none-any.whl
(30.9 kB
view details)
File details
Details for the file kwslib-0.0.2.tar.gz.
File metadata
- Download URL: kwslib-0.0.2.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3650846e5bee981ee879fc0344528b7b6dc4e947b85e13eff0301b14aed12de6
|
|
| MD5 |
9542c9cf6fa73874bba3f41ceac8586c
|
|
| BLAKE2b-256 |
f1e571a7abac226015f5c6062f355e1b97b043b239253f38ec2c1756b31ddc1f
|
File details
Details for the file kwslib-0.0.2-py3-none-any.whl.
File metadata
- Download URL: kwslib-0.0.2-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1807adf84458062e878d96726f9ccae37db084f1ba795330b05eb0c4a8004a7
|
|
| MD5 |
1982a371d8cb98d74b91e7d919e58068
|
|
| BLAKE2b-256 |
7fbdddac4197c3504a6ccb795423fad3297661dd7388b46aa153ad5ae8053519
|