46 lines
1.4 KiB
Bash
46 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Utilitaire générique pour appeler l'API OpenAI Chat Completions.
|
|
# Prérequis: variable d'environnement OPENAI_API_KEY et curl.
|
|
|
|
for bin in curl jq; do
|
|
if ! command -v "$bin" >/dev/null 2>&1; then
|
|
echo "$bin manquant. Installez $bin." >&2
|
|
exit 2
|
|
fi
|
|
done
|
|
|
|
MODEL="${OPENAI_MODEL}"
|
|
API_BASE="${OPENAI_API_BASE:-https://api.openai.com/v1}"
|
|
TEMPERATURE="${OPENAI_TEMPERATURE:-0.2}"
|
|
|
|
read -r -d '' SYSTEM_PROMPT <<'SYS'
|
|
Tu es un agent de conformité pour le template 4NK. Réponds en français, sans exemples d'application. Produit des listes d'actions, des risques et des recommandations courtes. Respecte la typographie française.
|
|
SYS
|
|
|
|
PROMPT="${1:-}"
|
|
if [[ -z "${PROMPT}" ]]; then
|
|
echo "Usage: $0 'message utilisateur'" >&2
|
|
exit 2
|
|
fi
|
|
|
|
if [[ -z "${OPENAI_API_KEY:-}" ]]; then
|
|
echo "OPENAI_API_KEY non défini; exécution sans IA (noop)." >&2
|
|
# No-op mode: renvoyer le prompt pour traçabilité
|
|
echo "[NO-AI] ${PROMPT}"
|
|
exit 0
|
|
fi
|
|
|
|
payload=$(jq -n \
|
|
--arg model "$MODEL" \
|
|
--arg system "$SYSTEM_PROMPT" \
|
|
--arg user "$PROMPT" \
|
|
--arg temperature "$TEMPERATURE" \
|
|
'{model: $model, temperature: ($temperature|tonumber? // 0.2), messages: [ {role:"system", content:$system}, {role:"user", content:$user} ] }')
|
|
|
|
curl -sS -X POST "${API_BASE}/chat/completions" \
|
|
-H "Authorization: Bearer ${OPENAI_API_KEY}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$payload" | jq -r '.choices[0].message.content // ""'
|