Ce face API compatibil OpenAI (/v1/...)
Ollama oferă o compatibilitate parțială cu API-ul OpenAI la http://localhost:11434/v1 (local) și https://ollama.com/v1 (cloud, cu cheie API). Clientul OpenAI cere o cheie, dar serverul local o ignoră, așa că poți pune orice valoare, de exemplu ollama.
Endpoint-uri: /v1/chat/completions (streaming, mod JSON, imagini base64, unelte, control al gândirii; fără logprobs), /v1/completions (prompt doar ca text), /v1/models și /v1/models/{model}, /v1/embeddings, /v1/audio/speech (de la v0.40.8, ieșire wav sau pcm) și /v1/responses (de la v0.13.3, doar varianta fără stare: fără previous_response_id sau conversation).
Câmpurile nesuportate la /v1/chat/completions sunt tool_choice, logit_bias, user și n; imaginile se dau doar base64, nu prin URL. API-ul OpenAI nu are un câmp pentru dimensiunea contextului, așa că pentru alt num_ctx creezi un model nou cu un Modelfile.
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
/v1/chat/completions |
Chat. Suportă model, messages, frequency_penalty, presence_penalty, response_format, seed, stop, stream, stream_options.include_usage, temperature, top_p, max_tokens, tools, reasoning_effort, reasoning.effort. |
/v1/completions |
Completare de text; prompt acceptă doar un șir. |
/v1/models, /v1/models/{model} |
Lista modelelor / un model. created = ultima modificare; owned_by = utilizatorul Ollama, implicit library. |
/v1/embeddings |
input ca text sau listă de texte, encoding_format, dimensions. Fără tablouri de tokeni. |
/v1/audio/speech |
Vorbire (v0.40.8+): input până la 4096 de caractere, voice, response_format wav (implicit) sau pcm; audio 16 biți, mono, 24 kHz. |
/v1/responses |
Responses API fără stare (v0.13.3+): input, instructions, tools, stream, temperature, top_p, max_output_tokens, reasoning.effort, think. |
Exemple practice
Exemplul 1: Clientul OpenAI pentru Python
from openai import OpenAI
client = OpenAI(
base_url='http://localhost:11434/v1/',
api_key='ollama', # necesar, dar ignorat
)
r = client.chat.completions.create(
messages=[{'role': 'user', 'content': 'Say this is a test'}],
model='gpt-oss:20b',
)
print(r.choices[0].message.content)
Exemplul 2: Același apel cu curl
curl -X POST http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss:20b",
"messages": [{ "role": "user", "content": "Say this is a test" }]
}'
Exemplul 3: Nume de model așteptat de o unealtă
Pentru unelte care cer nume OpenAI implicite, documentația recomandă o copie a modelului sub acel nume.
ollama cp llama3.2 gpt-3.5-turbo
Greșeli frecvente și bune practici
- Încerci să schimbi contextul prin API-ul OpenAI. Creează un model cu
PARAMETER num_ctxși folosește-l pe acela. - Folosești
previous_response_idîn/v1/responses. Ollama suportă doar varianta fără stare. - Ceri
mp3de la/v1/audio/speech. Formatul implicit estewav, iar valorile nesuportate întorc eroarea 400.