Exemples d'intégration
Exemples complets pour chaque service, en Python (SDK OpenAI), JavaScript et curl.
Choisir son endpoint
Les exemples de cette page utilisent l'endpoint de l'offre Scaleway. Sur Minint, seul l'hôte change : les routes et le format sont identiques. Les noms de modèles, eux, dépendent du catalogue de chaque offre (Modèles Scaleway · Modèles Minint).
python
client = OpenAI(
base_url="https://api.mirai.interieur.gouv.fr",
api_key="<TOKEN>"
)python
client = OpenAI(
base_url="https://api.mirai.interieur.rie.gouv.fr",
api_key="<TOKEN>"
)Chat LLM
Python — réponse complète
python
from openai import OpenAI
client = OpenAI(
base_url="https://api.mirai.interieur.gouv.fr",
api_key="<TOKEN>"
)
response = client.chat.completions.create(
model="chat-pro",
messages=[
{"role": "system", "content": "Tu es un assistant expert en droit administratif français."},
{"role": "user", "content": "Quelles sont les obligations de neutralité d'un fonctionnaire ?"}
]
)
print(response.choices[0].message.content)Python — streaming
python
stream = client.chat.completions.create(
model="chat-small",
messages=[{"role": "user", "content": "Résume ce texte en 3 points : ..."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)JavaScript
js
const response = await client.chat.completions.create({
model: 'tools',
messages: [{ role: 'user', content: 'Bonjour' }],
})
console.log(response.choices[0].message.content)Transcription audio
Python
python
from openai import OpenAI
client = OpenAI(
base_url="https://api.mirai.interieur.gouv.fr",
api_key="<TOKEN>"
)
with open("interview.wav", "rb") as f:
result = client.audio.transcriptions.create(
model="whisper-diarization",
file=f,
)
print(result.text)JavaScript
js
import fs from 'node:fs'
import OpenAI from 'openai'
const client = new OpenAI({
baseURL: 'https://api.mirai.interieur.gouv.fr',
apiKey: '<TOKEN>',
})
const result = await client.audio.transcriptions.create({
model: 'whisper-diarization',
file: fs.createReadStream('interview.wav'),
})
console.log(result.text)Diarisation audio (async + webhook)
bash
curl -X POST https://api.mirai.interieur.gouv.fr/jobs/audio \
-H "Authorization: Bearer <TOKEN>" \
-F "model=whisper-diarization" \
-F "file=@reunion.wav" \
-F "callback_url=https://mon-app.example.com/hooks/diarization"Embeddings
Python — vecteur unique
python
from openai import OpenAI
client = OpenAI(
base_url="https://api.mirai.interieur.gouv.fr",
api_key="<TOKEN>"
)
response = client.embeddings.create(
model="bge-m3",
input="Texte à vectoriser pour la recherche sémantique"
)
vector = response.data[0].embedding # liste de 1024 floatsPython — batch
python
texts = ["Document 1", "Document 2", "Document 3"]
response = client.embeddings.create(model="bge-m3", input=texts)
vectors = [item.embedding for item in response.data]Reranking
Python
python
import httpx
response = httpx.post(
"https://api.mirai.interieur.gouv.fr/v1/rerank",
headers={"Authorization": "Bearer <TOKEN>"},
json={
"model": "bge-reranker-v2-m3",
"query": "obligations du fonctionnaire territorial",
"texts": [
"Le fonctionnaire est soumis au principe de neutralité...",
"Les congés annuels sont fixés par décret...",
"L'obligation de réserve s'applique en dehors du service...",
],
"return_text": True,
}
)
results = response.json() # tableau trié par score décroissantPipeline RAG complet
Exemple bout-en-bout : embeddings → recherche vectorielle → reranking → LLM.
python
from openai import OpenAI
import httpx
client = OpenAI(
base_url="https://api.mirai.interieur.gouv.fr",
api_key="<TOKEN>"
)
question = "Quelles sont les obligations de neutralité d'un fonctionnaire ?"
# 1. Embeddings de la question
q_vec = client.embeddings.create(model="bge-m3", input=question).data[0].embedding
# 2. Recherche vectorielle (exemple avec votre base vectorielle)
# chunks = your_vector_db.search(q_vec, top_k=20)
# 3. Reranking
reranked = httpx.post(
"https://api.mirai.interieur.gouv.fr/v1/rerank",
headers={"Authorization": "Bearer <TOKEN>"},
json={
"model": "bge-reranker-v2-m3",
"query": question,
"texts": chunks,
"return_text": True,
}
).json()
context = "\n\n".join(r["text"] for r in reranked)
# 4. Génération
response = client.chat.completions.create(
model="chat-pro",
messages=[
{"role": "system", "content": f"Réponds uniquement à partir du contexte suivant :\n\n{context}"},
{"role": "user", "content": question},
]
)
print(response.choices[0].message.content)