Python SDK for the TokenSaver API: pipelines, chat sessions, and pricing estimates
Project description
TokenSaver SDK
Python client for the TokenSaver API (POST /pipelines/run, RAG, chat sessions, pricing).
Only HTTP transport and response normalization run in this package; all pipeline logic stays on the server.
Doc d’architecture (monorepo) : docs/ARCHITECTURE-SDK-TOKENSAVER.md
Installation
pip install tokensaver-sdk
Développement dans le monorepo :
cd packages/sdk
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
Configuration
api_key(obligatoire) : clé TokenSaver (ts_...).base_url(optionnel) : point d’entrée API ; défauthttps://platform.tokensaver.fr/api/v1.provider_api_key(optionnel) : clé LLM du fournisseur (openai,anthropic, etc.) envoyée à chaqueask/run_pipelinesi définie ici ; prioritaire sur les clés enregistrées en base pour ce run uniquement ; jamais stockée côté TokenSaver. Tu peux aussi passerprovider_api_key=sur un appel ponctuel.
from tokensaver_sdk import TokenSaver
ts = TokenSaver(api_key="ts_...")
# Backend local :
# ts = TokenSaver(api_key="ts_...", base_url="http://localhost:8000/api/v1")
# Clé LLM par défaut pour tous les runs (optionnel) :
# ts = TokenSaver(api_key="ts_...", provider_api_key="sk-...")
Appel pipeline (ask / run_pipeline)
ask() renvoie un RunResult (.text, .metrics, .trace, .context).
run_pipeline() renvoie le JSON brut de l’API.
Flags de modules (désactivés par défaut côté SDK, comme en console) :
use_cache, use_rag, use_compression, use_pii_filter, stream.
Paramètres avancés (alignés sur PipelineRunRequest / console) — passés tels quels au JSON :
| Paramètre | Usage |
|---|---|
temperature |
Température LLM (0–2). |
rag_similarity_threshold |
Seuil similarité RAG (0–1). |
cache_similarity_threshold |
Seuil similarité cache sémantique (0–1). |
compression_level |
Niveau compression 1–5. |
rag_options |
Dict : document_ids, top_k, query_image_url. |
pii_options |
Dict : engine, strategy, confidence_threshold, entity_types, language, regex_fallback. |
context_layers |
Format canonique (instructions, knowledge, interaction, token_budget). |
system_prompt, profile_context, workspace_instructions |
Champs plats historiques (si pas de context_layers). |
provider_api_key |
SDK : clé LLM éphémère pour ce run ; priorité sur la BDD ; non persistée. |
Types d’aide pour l’IDE : from tokensaver_sdk import RagOptions, PiiOptions (TypedDict).
result = ts.ask(
"Your question",
provider="openai",
model="gpt-4o",
use_rag=True,
rag_similarity_threshold=0.55,
rag_options={"document_ids": ["uuid-doc"], "top_k": 8},
)
RAG (documents)
| Méthode | Rôle |
|---|---|
rag_list_documents() |
Liste les PDF du workspace. |
rag_upload_document(path, …) |
Upload multipart (sans attente). Lève ValidationError (RAG_FILE_NOT_FOUND) si le fichier est absent. |
rag_get_document(id) |
Statut / métadonnées. |
rag_wait_document_ready(id, …) |
Attente ingestion. |
rag_upload_and_wait(path, …) |
Upload + attente. |
rag_ensure_document(path, …) |
Réutilise un fichier déjà ingéré (même nom de fichier) ou upload + attente. |
Exemple minimal avec question sur un PDF :
doc = ts.rag_ensure_document("handbook.pdf")
ts.ask(
"What are the key points?",
provider="openai",
model="gpt-4o",
use_rag=True,
rag_options={"document_ids": [doc["document_id"]]},
)
Sessions chat
from tokensaver_sdk import HISTORY_NONE, HISTORY_LOCAL, HISTORY_SERVER
# Stateless (défaut de ask : history=HISTORY_NONE)
ts.ask("…", provider="openai", model="gpt-4o", history=HISTORY_NONE)
# Persistance serveur
session = ts.chat.session(history=HISTORY_SERVER, name="My chat")
session.ask("…", provider="openai", model="gpt-4o")
Estimation de coût (sans appel LLM)
ts.estimate_cost(1200, 300, provider="openai", model="gpt-4o")
Erreurs
from tokensaver_sdk import ERROR_RAG_FILE_NOT_FOUND
from tokensaver_sdk.errors import (
TokenSaverError,
AuthenticationError,
ProviderKeyMissingError,
QuotaExceededError,
RateLimitError,
ValidationError,
ServerError,
TimeoutError,
)
Les erreurs HTTP sont mappées vers ces exceptions. Pour les uploads RAG (rag_upload_document, rag_upload_and_wait, rag_ensure_document quand un fichier est envoyé), un chemin PDF inexistant côté client lève ValidationError avec code="RAG_FILE_NOT_FOUND" (comparer à ERROR_RAG_FILE_NOT_FOUND) ; le champ raw contient notamment "path".
Tests & qualité
pytest
ruff check src tests && ruff format src tests
Variables utiles pour des tests d’intégration : TOKENSAVER_API_KEY, URL de base selon votre déploiement.
Publication sur PyPI
- Version : mettre à jour
__version__danssrc/tokensaver_sdk/__init__.py(seule source de vérité pour le build). - Build & contrôle :
python -m buildpuistwine check dist/*(dépendances dev :pip install -e ".[dev]"). - Upload :
twine upload dist/*(identifiant PyPI :__token__, mot de passe : le jeton API). TestPyPI possible en premier avec--repository testpypi. - CI : après ajout du secret dépôt
PYPI_API_TOKEN, pousser un tagsdk-v0.1.0(même numéro que__version__) déclenche le workflow Publish SDK to PyPI.
Référence détaillée
- Console TokenSaver : page API Reference (exemples, liste des méthodes SDK).
- Architecture & décisions :
docs/ARCHITECTURE-SDK-TOKENSAVER.md.
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
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 tokensaver_sdk-0.1.0.tar.gz.
File metadata
- Download URL: tokensaver_sdk-0.1.0.tar.gz
- Upload date:
- Size: 15.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fadbd58647a49b0dbd88e9bcc66001871b4776ae1e57563bb68ff184c2c00275
|
|
| MD5 |
af02e4fac9a6b229382b549af0170513
|
|
| BLAKE2b-256 |
8f9e044c8dad4456135a41c80cb4c0940a0663dbde0d47edbc08c100d71065e2
|
File details
Details for the file tokensaver_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tokensaver_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6df487898c3f83cfb187606d7921817a652af772e88b055392911792fb65a70b
|
|
| MD5 |
7ae83a7a6096c0c1c4eaf5cfa8233413
|
|
| BLAKE2b-256 |
258a350277ebf3cb5e6b3393569102a7ba1a35f45dd991782e4c62c557251d6b
|