În FIM (Fill In the Middle) dai un început (prompt) și, opțional, un final (suffix), iar modelul scrie ce lipsește între ele; e folosit mai ales la completarea de cod. Endpoint-ul este POST /completions, nu /chat/completions, și cere base_url="https://api.deepseek.com/beta". Ieșirea are cel mult 4K tokeni, iar tabelul de modele spune că FIM funcționează doar în modul non-thinking. Documentația dă extensia Continue pentru VS Code ca exemplu de integrare.
Chat Prefix Completion folosește Chat Completions: ultimul mesaj din messages are rolul assistant și "prefix": True, iar modelul continuă exact de acolo. Cere tot base_url terminat în /beta. În modul thinking, ultimul mesaj poate avea și reasoning_content, folosit ca început al raționamentului.
Împreună cu stop (până la 16 secvențe), prefixul controlează formatul. În exemplul oficial, prefixul "```python\n" și stop=["```"] fac modelul să scrie doar cod Python, fără explicații înainte sau după.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
POST /completions |
Endpoint-ul FIM (Beta); modele: deepseek-flash, deepseek-v4-pro. |
prompt |
Textul de dinaintea golului (obligatoriu). |
suffix |
Textul de după gol (opțional). |
max_tokens |
La FIM, ieșirea are cel mult 4K tokeni. |
echo |
Repetă promptul în răspuns; nu se poate folosi împreună cu suffix sau logprobs. |
stop |
Până la 16 secvențe; textul întors nu conține secvența de oprire. |
prefix: True |
Pe ultimul mesaj assistant: modelul continuă acest început. |
reasoning_content (cu prefix) |
Început de raționament pentru Chat Prefix Completion în modul thinking. |
Exemple practice și scenarii reale
Exemplul 1: FIM: completarea corpului unei funcții
Exemplul oficial: se dau începutul și finalul funcției Fibonacci.
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["DEEPSEEK_API_KEY"], base_url="https://api.deepseek.com/beta")
r = client.completions.create(
model="deepseek-flash",
prompt="def fib(a):",
suffix=" return fib(a-1) + fib(a-2)",
max_tokens=128,
)
print(r.choices[0].text)
Exemplul 2: Chat Prefix Completion: doar cod
messages = [
{"role": "user", "content": "Scrie un quicksort în Python."},
{"role": "assistant", "content": "```python\n", "prefix": True},
]
r = client.chat.completions.create(model="deepseek-flash", messages=messages, stop=["```"])
print(r.choices[0].message.content)
Greșeli frecvente și capcane
- Lași
base_urlfără/beta. Funcțiile Beta nu sunt active pe adresa obișnuită. - Apelezi FIM prin
/chat/completions. FIM foloseșteclient.completions.create(POST /completions). - Ultimul mesaj nu este
assistantsau nu areprefixsetat. Prefix completion cere ambele condiții.