Référence de la CLI du serveur
Paquet : piighost-api
piighost-api est la ligne de commande du serveur compagnon. serve démarre le serveur HTTP. Les commandes dataset construisent et notent un jeu de détections à partir des traces d'observation.
piighost-api serve [--config SOURCE] [--host HOST] [--port PORT] [--log-level LEVEL]
piighost-api dataset extract --output FILE [--since DATE] [--until DATE] [--mode MODE] [--limit N]
piighost-api dataset metrics --input FILE [--output FILE] [--output-format FORMAT] [--match-mode MODE] [--iou-threshold FLOAT] [--source SOURCE]Le serveur demande Python 3.12 ou plus récent et piighost>=2.0,<3. Ses extras ajoutent des fonctions optionnelles :
| Extra | Ajoute |
|---|---|
gliner2 | piighost[gliner2], pour une configuration qui exécute un détecteur GLiNER2 |
observation | le SDK OpenTelemetry et l'exporteur OTLP, pour exporter les traces |
dataset | le SDK Langfuse et python-dotenv, pour dataset extract |
pip install "piighost-api[gliner2,observation]"piighost-api serve
Construit le pipeline une fois et sert les endpoints de l'API avec uvicorn, dans un seul processus.
piighost-api serve --config catalog:piighost/support-en --host 0.0.0.0 --port 8000| Option | Défaut | Description |
|---|---|---|
--config, -c | PIIGHOST_CONFIG | Un fichier de config de pipeline TOML ou JSON, ou une référence du catalogue comme catalog:piighost/support-en |
--host | 127.0.0.1 | Hôte d'écoute |
--port | 8000 | Port d'écoute |
--log-level | info | debug, info, warning ou error |
- Sans
--configniPIIGHOST_CONFIG, la commande imprimeMissing --config or PIIGHOST_CONFIG.avec une indication d'usage et sort en1. Un chemin de fichier qui n'existe pas sort en1avecConfiguration file not found:. - Une référence du catalogue charge la configuration complète que le catalogue piighost publie sous ce nom. Une référence épinglée à un commit est récupérée au premier démarrage, puis lue dans le cache disque.
- Une configuration qui ne déclare pas de section
[memory]est servie avec la mémoire in-process,in_memory. Ses conversations vivent dans le processus du serveur, donc chaque instance tient les siennes. Plusieurs instances derrière un load balancer demandent une mémoireredisousqlalchemypartagée, voir Déploiement multi-instance. - Toute section de premier niveau se surcharge avec une variable
PIIGHOST_qui porte un objet JSON, comme pour un fichier, voir Surcharges d'environnement.PIIGHOST_MEMORYajoute ainsi une mémoire partagée à une configuration du catalogue. Celle de l'exemple ci-dessous demandepiighost[crypto]pour son cipher. - Sans clé dans une variable
API_KEY_, le serveur refuse de démarrer sauf siPIIGHOST_ALLOW_ANONYMOUSest posée.
export PIIGHOST_MEMORY='{"type": "redis", "url": "redis://redis:6379/0", "hasher": {"type": "argon2"}, "cipher": {"type": "aesgcm"}}'
piighost-api serve --config catalog:piighost/support-enVariables d'environnement
| Variable | Défaut | Effet |
|---|---|---|
PIIGHOST_CONFIG | aucun | Fichier de config ou référence du catalogue, lu quand --config est absent |
API_KEY_<NAME> | aucun | Une clé d'API acceptée par variable. La valeur est celle qu'imprime keyshield generate |
SECRET_PEPPER | le poivre intégré de keyshield, avec un avertissement | Poivre du hash Argon2 que le serveur garde de chaque clé, imprimé par keyshield pepper |
PIIGHOST_ALLOW_ANONYMOUS | désactivé | 1, true, yes ou on laisse le serveur démarrer sans clé, chaque route est alors ouverte. S'applique aussi quand les clés échouent à se charger |
PIIGHOST_MAX_BODY_BYTES | 1000000 | Plus grand corps de requête accepté, au-delà 413 |
PIIGHOST_RATE_LIMIT | désactivé | <unit>:<count> par client, unit parmi second, minute, hour, day, comme minute:300. Une valeur mal formée arrête le serveur au démarrage |
PIIGHOST_OPENAI_UPSTREAM | https://api.openai.com/v1 | Upstream de /openai/v1 quand une requête n'en nomme aucun |
PIIGHOST_ANTHROPIC_UPSTREAM | https://api.anthropic.com/v1 | Upstream de /anthropic/v1 quand une requête n'en nomme aucun |
PIIGHOST_ANTHROPIC_ANONYMIZE_SYSTEM | false | 1, true, yes ou on dé-identifie aussi le prompt système |
PIIGHOST_ANTHROPIC_PLACEHOLDER_NOTE | vide, pas de note | default ajoute la note intégrée sur les placeholders. Tout autre texte sert lui-même de note |
PIIGHOST_ANTHROPIC_NOTE_PLACEMENT | system | user place la note dans le premier message utilisateur, toute autre valeur dans le prompt système |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, OTEL_EXPORTER_OTLP_ENDPOINT | aucun | Un endpoint OTLP active l'export des traces. Si les deux sont posées, la première de la liste l'emporte. Demande l'extra observation |
OTEL_SERVICE_NAME | piighost-api | Nom de service des traces exportées |
LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY | aucun | Identifiants de dataset extract |
Le pipeline lit ses propres secrets (PIIGHOST_HASH_PEPPER, PIIGHOST_CIPHER_KEY, PIIGHOST_DATABASE_URL et MISTRAL_API_KEY). PIIGHOST_CATALOG_URL nomme un catalogue privé. Ces variables sont listées dans la Référence TOML. Les autres variables OTEL_*, en-têtes compris, sont lues par l'exporteur OpenTelemetry lui-même, voir Observation.
L'image Docker en lit quatre de plus, listées dans Déployer un pipeline en production.
piighost-api dataset extract
Lit des traces sur Langfuse et écrit un enregistrement JSONL par trace. Il demande l'extra dataset ainsi que LANGFUSE_PUBLIC_KEY et LANGFUSE_SECRET_KEY, lues dans l'environnement ou dans un fichier .env du répertoire courant. Sans elles, il sort en 1.
piighost-api dataset extract --output dataset.jsonl --since 2026-09-01 --limit 1000| Option | Défaut | Description |
|---|---|---|
--output, -o | requis | Fichier JSONL à écrire |
--since | aucun | Ignore les traces antérieures à cette date, %Y-%m-%d, %Y-%m-%dT%H:%M:%S ou %Y-%m-%d %H:%M:%S |
--until | aucun | Ignore les traces postérieures à cette date, mêmes formats |
--mode | all | hitl, model-only ou all |
--limit | aucun | S'arrête après ce nombre d'enregistrements |
--mode | Nom de trace lu | entities tiré de |
|---|---|---|
hitl | piighost.hitl_correction | les detections de la sortie de la trace, la correction humaine |
model-only | piighost.anonymize | les detections de sortie de son enfant piighost.detect |
all | les deux | selon la trace |
Une trace sans texte d'entrée, ou une trace de modèle sans son enfant piighost.detect, est ignorée. La commande se termine par Wrote N records to FILE (M skipped).
{
"text": "Hi Jane Doe, from Acme in Boston",
"entities": [[3, 11, "PERSON"], [18, 22, "ORGANIZATION"], [26, 32, "LOCATION"]],
"model_entities": [[3, 11, "PERSON"], [18, 22, "LOCATION"]],
"labels_universe": [],
"source": "hitl",
"trace_id": "...",
"session_id": "...",
"created_at": "..."
}| Champ | Contenu |
|---|---|
entities | Les spans de référence en [start, end, label]. C'est la correction humaine pour un enregistrement hitl, et la sortie du modèle pour un enregistrement model |
model_entities | Les spans du modèle, égaux à entities sur un enregistrement model |
labels_universe | Les labels de l'entrée d'une trace de correction, vide sur un enregistrement model |
source | hitl ou model |
piighost-api dataset metrics
Note le modèle contre la référence d'un fichier JSONL écrit par dataset extract, label par label. Il ne demande aucun extra.
piighost-api dataset metrics --input dataset.jsonl| Option | Défaut | Description |
|---|---|---|
--input, -i | requis | Fichier JSONL à lire |
--output, -o | stdout | Fichier où écrire le rapport |
--output-format | table | table, csv ou json |
--match-mode | strict | strict exige le même span et le même label, lenient accepte un span de même label dont le taux de recouvrement atteint --iou-threshold |
--iou-threshold | 0.5 | Seuil de recouvrement en mode lenient |
--source | all | hitl, model ou all, les enregistrements à noter |
Sur l'enregistrement ci-dessus, le tableau est :
label tp fp fn P R F1
--------------------------------------------------------------
LOCATION 0 1 1 0.00 0.00 0.00
ORGANIZATION 0 0 1 0.00 0.00 0.00
PERSON 1 0 0 1.00 1.00 1.00
--------------------------------------------------------------
macro avg - - - 0.33 0.33 0.33
micro avg - - - 0.50 0.33 0.40
Label confusion (model -> human, same span):
LOCATION -> ORGANIZATION: 1tp compte un span du modèle que la référence contient, fp un span du modèle qu'elle ne contient pas, fn un span de référence que le modèle a manqué. P, R et F1 sont la précision, le rappel et leur moyenne harmonique. La section de confusion liste les spans où le modèle et la référence s'accordent sur les décalages et diffèrent sur le label.
Voir aussi
- Endpoints de l'API : chaque route que le serveur sert.
- Déployer une API de dé-identification : un premier serveur, pas à pas.
- CLI : la commande
piighostde la librairie.