Tutoriel - SDK Python, engine et provider
Relier un provider Python au vrai Core, conserver l'historique dans SQLite et vérifier le résultat. Cette recette est entièrement locale : aucune clé API, aucun appel modèle et aucun tarif fictif présenté comme un tarif fournisseur.
1. Installer le SDK du projet
Depuis un répertoire de projet, après installation de Touba :
touba sdk install python
source .venv/bin/activate
Sous Windows, utilisez .venv\Scripts\Activate.ps1. Gardez touba accessible
dans le terminal. Voir le guide SDK Python.
2. Déclarer le programme
module sdk.provider
agent Reviewer
gives Text
responsibility "Return the text Ready."
callable_by strategy Run
strategy Run
gives Text
uses Reviewer
do
Reviewer
into result
give result
3. Brancher le provider et l'historique
from pathlib import Path
from touba_sdk import create_ai_sdk_decision_provider
from touba_sdk.history.sqlite import create_sqlite_decision_history_store
Path(".touba/private").mkdir(parents=True, exist_ok=True, mode=0o700)
store = create_sqlite_decision_history_store(
filename=".touba/private/history.sqlite"
)
async def generate(options):
# Deterministic teaching example, not a model call.
return {
"finishReason": "stop",
"object": {"decision": {
"action": "answer_directly",
"source": "tutorial",
"reason": "The requested text is available.",
"result": "Ready",
}},
}
decide_agent_capability = create_ai_sdk_decision_provider(
model="offline-demo",
generate_object=generate,
json_schema=lambda schema: schema,
history={"store": store, "namespace": "tutorial"},
)
Le callback generate produit ici une réponse de test déterministe au format
attendu par l'adaptateur. Dans une application modèle, utilisez le transport de
votre fournisseur ou une factory comme create_open_ai_decision_provider.
Le type de retour et les actions proposées restent contrôlés par le Core.
SQLite est fourni par le backend embarqué avec Touba : aucun serveur de base de
données à installer. L'historique est lié aux identifiants de run et d'invocation,
pas au seul nom de l'agent. Une nouvelle exécution ne réutilise pas implicitement
une conversation terminée. Pour la durée du module, RAM convient aussi :
omettez simplement history pour le comportement par défaut.
4. Exécuter et vérifier
from touba_sdk import ToubaEngine
from touba_sdk.testing import assert_run_succeeded
engine = ToubaEngine(project_root=".")
run = engine.run(
source="program.tb",
entry_ref="strategy:sdk.provider/Run",
agent_decision_provider="provider.py",
timeout=20,
)
assert_run_succeeded(run, "Ready")
print(run.result)
python app.py
Résultat attendu : Ready. Le module Python est chargé depuis le projet ;
stdout reste réservé au protocole. Vos logs de module peuvent utiliser stderr.
La CLI ferme le module et le backend à la fin du run ; SQLite reste sur disque.
5. Passer à un modèle
Le guide SDK Python montre la factory HTTP et
decision_interface="native". Fournissez un modèle disponible, sa clé par
l'environnement hôte et un budget adapté avant de lancer un appel payant.
Les deux interfaces gardent la même admission Core. L'adaptateur générique
accepte aussi generate_text et json_schema, avec le contrat AI SDK.
Pour borner le contexte, lisez historique et compaction. Les limites d'historique ne sont pas un plafond financier ; celui-ci se branche séparément selon le guide des coûts.