Complétion FIM
La complétion FIM (Fill In the Middle) remplit un trou entre un préfixe et un suffixe de code. C'est le mécanisme derrière l'autocomplétion d'un éditeur : vous donnez ce qu'il y a avant et après le curseur, le modèle écrit ce qui manque.
Endpoint#
POST https://api.cloudzir.com/v1/completions
curl https://api.cloudzir.com/v1/completions \
-H "Authorization: Bearer $CLOUDZIR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "mina-flash",
"prompt": "def moyenne(valeurs):\n if not valeurs:\n return 0.0\n",
"suffix": "\n\nprint(moyenne([1, 2, 3]))",
"max_tokens": 80,
"temperature": 0
}'from openai import OpenAI
client = OpenAI(api_key="zir_ai_...", base_url="https://api.cloudzir.com/v1")
reponse = client.completions.create(
model="mina-flash",
prompt="def moyenne(valeurs):\n if not valeurs:\n return 0.0\n",
suffix="\n\nprint(moyenne([1, 2, 3]))",
max_tokens=80,
temperature=0,
)
print(reponse.choices[0].text)
# → return sum(valeurs) / len(valeurs)const reponse = await client.completions.create({
model: "mina-flash",
prompt: "def moyenne(valeurs):\n if not valeurs:\n return 0.0\n",
suffix: "\n\nprint(moyenne([1, 2, 3]))",
max_tokens: 80,
temperature: 0,
});
console.log(reponse.choices[0].text);Réponse#
{
"id": "cmpl-4334a6f158894999",
"object": "text_completion",
"created": 1766400000,
"model": "mina-flash",
"choices": [{
"index": 0,
"text": " return sum(valeurs) / len(valeurs)",
"logprobs": null,
"finish_reason": "stop"
}],
"usage": {"prompt_tokens": 36, "completion_tokens": 13, "total_tokens": 49}
}
Le champ text contient uniquement ce qui manque : ni le préfixe, ni
le suffixe. Vous reconstituez le fichier avec prompt + text + suffix.
Paramètres#
| Champ | Description |
|---|---|
model requis | mina-flash, mina-low ou mina-full. |
prompt requis | Le code AVANT le curseur. |
suffix | Le code APRÈS le curseur. Sans lui, c'est une simple complétion de fin. |
max_tokens | Défaut 256. Plafonné par le modèle. |
temperature, top_p | Pour du code, restez bas (0 à 0,2). |
stop | 4 séquences maximum. |
user | Identifiant de votre utilisateur final (isolement des limites). |
"stream": true renvoie un 400 sur cet endpoint. Une complétion
d'éditeur est courte : elle arrive en un seul morceau. Pour du streaming, utilisez
/v1/chat/completions.
Brancher un éditeur#
Toute extension qui parle « OpenAI completions » fonctionne : pointez-la sur
https://api.cloudzir.com/v1 avec le modèle mina-flash.
Pour de l'autocomplétion, seul compte le temps de réponse : prenez
mina-flash, avec un max_tokens serré (64 à 128) et une température
à 0. Une complétion qui arrive après une seconde n'est plus utilisée par le développeur.
Maîtriser le coût#
- Ne transmettez pas tout le fichier : 30 à 60 lignes avant le curseur et 10 à 20 après suffisent presque toujours.
- Déclenchez la complétion sur pause de frappe (150 à 300 ms), pas à chaque caractère.
- Annulez la requête en cours quand l'utilisateur continue de taper.
Limites#
prompt+suffix: 200 000 caractères au total.- Pas de streaming, pas d'appels d'outils, pas d'images sur cet endpoint.
n> 1 non supporté : une seule complétion par requête.