واجهة برمجة التطبيقات (API)
ملاحظة: تنتقل وثائق واجهة برمجة التطبيقات (API) الخاصة بـ Ollama إلى https://docs.ollama.com/api
نقاط النهاية
- إنشاء إكمال
- إنشاء إكمال محادثة
- إنشاء نموذج
- سرد النماذج المحلية
- عرض معلومات النموذج
- نسخ نموذج
- حذف نموذج
- سحب نموذج
- دفع نموذج
- إنشاء التمثيلات المتجهية (Embeddings)
- سرد النماذج قيد التشغيل
- الإصدار
- تجريبي: إنشاء الصور
الاتفاقيات
أسماء النماذج
تتبع أسماء النماذج التنسيق model:tag، حيث يمكن أن يحتوي حقل model على نطاق اختياري مثل example/model. بعض الأمثلة هي orca-mini:3b-q8_0 و llama3:70b. العلامة (tag) اختيارية، وإذا لم يتم توفيرها، فستكون قيمتها الافتراضية latest. تُستخدم العلامة لتحديد إصدار محدد.
المدد الزمنية
يتم إرجاع جميع المدد الزمنية بوحدة النانوثانية.
الاستجابات المتدفقة
تقوم بعض نقاط النهاية بتدفق الاستجابات ككائنات JSON. يمكن تعطيل التدفق عن طريق توفير {"stream": false} لهذه النقاط.
إنشاء إكمال
POST /api/generateإنشاء استجابة لمطالبة معينة باستخدام نموذج محدد. هذه نقطة نهاية متدفقة، لذا ستكون هناك سلسلة من الاستجابات. سيتضمن كائن الاستجابة النهائي إحصائيات وبيانات إضافية من الطلب.
المعاملات
model: (مطلوب) اسم النموذجprompt: المطالبة التي سيتم إنشاء استجابة لهاsuffix: النص الذي يلي استجابة النموذجimages: (اختياري) قائمة بالصور المشفرة بتنسيق base64 (للنماذج متعددة الوسائط مثلllava)think: (للنماذج التي تدعم التفكير) هل يجب على النموذج التفكير قبل الاستجابة؟ يمكن أن تكون قيمة منطقية (boolean) أو مستوى تفكير ("low"،"medium"،"high"، أو"max").
معاملات متقدمة (اختيارية):
format: التنسيق الذي سيتم إرجاع الاستجابة به. يمكن أن يكون التنسيقjsonأو مخطط JSON (JSON schema)options: معاملات نموذج إضافية مذكورة في وثائق Modelfile مثلtemperaturesystem: رسالة النظام (تتجاوز ما هو معرف في ملفModelfile)template: قالب المطالبة الذي سيتم استخدامه (تتجاوز ما هو معرف في ملفModelfile)stream: إذا كانت القيمةfalse، فسيتم إرجاع الاستجابة ككائن استجابة واحد، بدلاً من تدفق من الكائناتraw: إذا كانت القيمةtrue، فلن يتم تطبيق أي تنسيق على المطالبة. يمكنك اختيار استخدام معاملrawإذا كنت تحدد مطالبة قالب كاملة في طلبك إلى واجهة برمجة التطبيقات (API)keep_alive: يتحكم في المدة التي سيبقى فيها النموذج محملاً في الذاكرة بعد الطلب (الافتراضي:5m)context(مهمل): معامل السياق الذي يتم إرجاعه من طلب سابق إلى/generate، ويمكن استخدامه للحفاظ على ذاكرة محادثة قصيرة
معاملات توليد الصور التجريبية (للنماذج التي تولد الصور فقط):
WARNING
هذه المعاملات تجريبية وقد تتغير في الإصدارات المستقبلية.
width: عرض الصورة المولدة بالبكسلheight: ارتفاع الصورة المولدة بالبكسلsteps: عدد خطوات الانتشار (diffusion steps)
المخرجات المنظمة
يتم دعم المخرجات المنظمة عن طريق توفير مخطط JSON في معامل format. سيقوم النموذج بإنشاء استجابة تطابق المخطط. انظر إلى مثال المخرجات المنظمة أدناه.
وضع JSON
تفعيل وضع JSON عن طريق تعيين معامل format إلى json. سيؤدي هذا إلى هيكلة الاستجابة ككائن JSON صالح. انظر إلى مثال وضع JSON أدناه.
IMPORTANT
من المهم توجيه النموذج لاستخدام JSON في حقل prompt. وإلا، قد يقوم النموذج بتوليد كميات كبيرة من المسافات البيضاء.
الأمثلة
طلب إنشاء (متدفق)
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?"
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
json
{
"model": "llama3.2",
"created_at": "2023-08-04T08:52:19.385406455-07:00",
"response": "The",
"done": false
}تتضمن الاستجابة النهائية في التدفق بيانات إضافية حول عملية التوليد:
total_duration: الوقت المستغرق في إنشاء الاستجابةload_duration: الوقت المستغرق بالنانوثانية في تحميل النموذجprompt_eval_count: عدد الرموز (tokens) في المطالبةprompt_eval_duration: الوقت المستغرق بالنانوثانية في تقييم المطالبةeval_count: عدد الرموز (tokens) في الاستجابةeval_duration: الوقت المستغرق بالنانوثانية في إنشاء الاستجابةcontext: ترميز للمحادثة المستخدمة في هذه الاستجابة، ويمكن إرساله في الطلب التالي للحفاظ على ذاكرة المحادثةresponse: فارغة إذا كانت الاستجابة متدفقة، وإذا لم تكن متدفقة، فستحتوي على الاستجابة الكاملة
لحساب سرعة إنشاء الاستجابة بالرموز في الثانية (token/s)، اقسم eval_count على eval_duration واضرب الناتج في 10^9.
json
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"response": "",
"done": true,
"context": [1, 2, 3],
"total_duration": 10706818083,
"load_duration": 6338219291,
"prompt_eval_count": 26,
"prompt_eval_duration": 130079000,
"eval_count": 259,
"eval_duration": 4232710000
}طلب (بدون تدفق)
الطلب
يمكن استلام الاستجابة في رد واحد عند إيقاف التدفق.
shell
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?",
"stream": false
}'الاستجابة
إذا تم تعيين stream إلى false، فستكون الاستجابة كائن JSON واحد:
json
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"response": "The sky is blue because it is the color of the sky.",
"done": true,
"context": [1, 2, 3],
"total_duration": 5043500667,
"load_duration": 5025959,
"prompt_eval_count": 26,
"prompt_eval_duration": 325953000,
"eval_count": 290,
"eval_duration": 4709213000
}طلب (مع لاحقة)
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "codellama:code",
"prompt": "def compute_gcd(a, b):",
"suffix": " return result",
"options": {
"temperature": 0
},
"stream": false
}'الاستجابة
json5
{
"model": "codellama:code",
"created_at": "2024-07-22T20:47:51.147561Z",
"response": "\n if a == 0:\n return b\n else:\n return compute_gcd(b % a, a)\n\ndef compute_lcm(a, b):\n result = (a * b) / compute_gcd(a, b)\n",
"done": true,
"done_reason": "stop",
"context": [...],
"total_duration": 1162761250,
"load_duration": 6683708,
"prompt_eval_count": 17,
"prompt_eval_duration": 201222000,
"eval_count": 63,
"eval_duration": 953997000
}طلب (مع مخرجات منظمة)
الطلب
shell
curl -X POST http://localhost:11434/api/generate -H "Content-Type: application/json" -d '{
"model": "llama3.1:8b",
"prompt": "Ollama is 22 years old and is busy saving the world. Respond using JSON",
"stream": false,
"format": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"available": {
"type": "boolean"
}
},
"required": [
"age",
"available"
]
}
}'الاستجابة
json
{
"model": "llama3.1:8b",
"created_at": "2024-12-06T00:48:09.983619Z",
"response": "{\n \"age\": 22,\n \"available\": true\n}",
"done": true,
"done_reason": "stop",
"context": [1, 2, 3],
"total_duration": 1075509083,
"load_duration": 567678166,
"prompt_eval_count": 28,
"prompt_eval_duration": 236000000,
"eval_count": 16,
"eval_duration": 269000000
}طلب (وضع JSON)
IMPORTANT
عند تعيين format إلى json، ستكون المخرجات دائماً كائن JSON صالح التنسيق. من المهم أيضاً توجيه النموذج للاستجابة بتنسيق JSON.
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "What color is the sky at different times of the day? Respond using JSON",
"format": "json",
"stream": false
}'الاستجابة
json
{
"model": "llama3.2",
"created_at": "2023-11-09T21:07:55.186497Z",
"response": "{\n\"morning\": {\n\"color\": \"blue\"\n},\n\"noon\": {\n\"color\": \"blue-gray\"\n},\n\"afternoon\": {\n\"color\": \"warm gray\"\n},\n\"evening\": {\n\"color\": \"orange\"\n}\n}\n",
"done": true,
"context": [1, 2, 3],
"total_duration": 4648158584,
"load_duration": 4071084,
"prompt_eval_count": 36,
"prompt_eval_duration": 439038000,
"eval_count": 180,
"eval_duration": 4196918000
}ستكون قيمة response سلسلة نصية تحتوي على JSON مشابه لما يلي:
json
{
"morning": {
"color": "blue"
},
"noon": {
"color": "blue-gray"
},
"afternoon": {
"color": "warm gray"
},
"evening": {
"color": "orange"
}
}طلب (مع صور)
لتقديم الصور إلى النماذج متعددة الوسائط مثل llava أو bakllava، قم بتوفير قائمة من images المشفرة بتنسيق base64:
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "llava",
"prompt":"What is in this picture?",
"stream": false,
"images": ["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"]
}'الاستجابة
json
{
"model": "llava",
"created_at": "2023-11-03T15:36:02.583064Z",
"response": "A happy cartoon character, which is cute and cheerful.",
"done": true,
"context": [1, 2, 3],
"total_duration": 2938432250,
"load_duration": 2559292,
"prompt_eval_count": 1,
"prompt_eval_duration": 2195557000,
"eval_count": 44,
"eval_duration": 736432000
}طلب (الوضع الخام)
في بعض الحالات، قد ترغب في تجاوز نظام القوالب وتقديم مطالبة كاملة. في هذه الحالة، يمكنك استخدام معامل raw لتعطيل نظام القوالب. لاحظ أيضاً أن الوضع الخام لن يُرجع قيمة سياق (context).
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "mistral",
"prompt": "[INST] why is the sky blue? [/INST]",
"raw": true,
"stream": false
}'طلب (مخرجات قابلة للتكرار)
للحصول على مخرجات قابلة للتكرار، عيّن seed إلى رقم:
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "mistral",
"prompt": "Why is the sky blue?",
"options": {
"seed": 123
}
}'الاستجابة
json
{
"model": "mistral",
"created_at": "2023-11-03T15:36:02.583064Z",
"response": " The sky appears blue because of a phenomenon called Rayleigh scattering.",
"done": true,
"total_duration": 8493852375,
"load_duration": 6589624375,
"prompt_eval_count": 14,
"prompt_eval_duration": 119039000,
"eval_count": 110,
"eval_duration": 1779061000
}طلب إنشاء (مع معاملات)
إذا كنت تريد تعيين معاملات مخصصة للنموذج في وقت التشغيل بدلاً من تعريفها في ملف Modelfile، يمكنك القيام بذلك باستخدام معامل options. يضبط هذا المثال جميع المعاملات المتاحة، ولكن يمكنك تعيين أي منها بشكل فردي وحذف المعاملات التي لا ترغب في تجاوزها.
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?",
"stream": false,
"options": {
"num_keep": 5,
"seed": 42,
"num_predict": 100,
"draft_num_predict": 4,
"top_k": 20,
"top_p": 0.9,
"min_p": 0.0,
"typical_p": 0.7,
"repeat_last_n": 33,
"temperature": 0.8,
"repeat_penalty": 1.2,
"presence_penalty": 1.5,
"frequency_penalty": 1.0,
"penalize_newline": true,
"stop": ["\n", "user:"],
"numa": false,
"num_ctx": 1024,
"num_batch": 2,
"num_gpu": 1,
"main_gpu": 0,
"use_mmap": true,
"num_thread": 8
}
}'الاستجابة
json
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"response": "The sky is blue because it is the color of the sky.",
"done": true,
"context": [1, 2, 3],
"total_duration": 4935886791,
"load_duration": 534986708,
"prompt_eval_count": 26,
"prompt_eval_duration": 107345000,
"eval_count": 237,
"eval_duration": 4289432000
}تحميل نموذج
إذا تم توفير مطالبة فارغة، فسيتم تحميل النموذج إلى الذاكرة.
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2"
}'الاستجابة
يتم إرجاع كائن JSON واحد:
json
{
"model": "llama3.2",
"created_at": "2023-12-18T19:52:07.071755Z",
"response": "",
"done": true
}إلغاء تحميل نموذج
إذا تم توفير مطالبة فارغة وتم تعيين معامل keep_alive إلى 0، فسيتم إلغاء تحميل النموذج من الذاكرة.
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"keep_alive": 0
}'الاستجابة
يتم إرجاع كائن JSON واحد:
json
{
"model": "llama3.2",
"created_at": "2024-09-12T03:54:03.516566Z",
"response": "",
"done": true,
"done_reason": "unload"
}إنشاء إكمال محادثة
POST /api/chatيُنشئ الرسالة التالية في محادثة باستخدام نموذج معين. هذه نقطة نهاية دفقية (streaming)، لذا ستكون هناك سلسلة من الاستجابات. يمكن تعطيل البث المتدفق باستخدام "stream": false. كائن الاستجابة النهائي سيتضمن إحصائيات وبيانات إضافية من الطلب.
المعاملات
model: (مطلوب) اسم النموذجmessages: رسائل المحادثة، يمكن استخدام هذا للحفاظ على ذاكرة المحادثةtools: قائمة بالأدوات بتنسيق JSON لاستخدامها من قبل النموذج إذا كان مدعوماًthink: (للنماذج التي تدعم التفكير) هل يجب على النموذج التفكير قبل الرد؟ يمكن أن تكون قيمة منطقية (boolean) أو مستوى تفكير ("low","medium","high", أو"max"). كائنmessageيحتوي على الحقول التالية:role: دور الرسالة، إماsystemأوuserأوassistantأوtoolcontent: محتوى الرسالةthinking: (للنماذج التي تدعم التفكير) عملية تفكير النموذجimages(اختياري): قائمة بالصور لتضمينها في الرسالة (للنماذج متعددة الوسائط مثلllava)tool_calls(اختياري): قائمة بالأدوات بتنسيق JSON التي يرغب النموذج في استخدامهاtool_name(اختياري): إضافة اسم الأداة التي تم تنفيذها لإعلام النموذج بالنتيجة
المعاملات المتقدمة (اختياري):
format: التنسيق الذي سيتم إرجاع الاستجابة به. يمكن أن يكون التنسيقjsonأو مخطط JSON.options: معاملات نموذج إضافية مذكورة في وثائق Modelfile مثلtemperaturestream: إذا كانت القيمةfalse، سيتم إرجاع الاستجابة ككائن استجابة واحد، بدلاً من تدفق من الكائناتkeep_alive: يتحكم في المدة التي سيبقى فيها النموذج محملاً في الذاكرة بعد الطلب (الافتراضي:5m)
استدعاء الأدوات
يتم دعم استدعاء الأدوات عن طريق توفير قائمة بالأدوات في معامل tools. سيقوم النموذج بتوليد استجابة تتضمن قائمة باستدعاءات الأدوات. راجع المثال طلب محادثة (بث متدفق مع أدوات) أدناه. يمكن للنماذج أيضاً شرح نتيجة استدعاء الأداة في الاستجابة. راجع المثال طلب محادثة (مع سجل محادثات، مع أدوات) أدناه. انظر النماذج التي تدعم إمكانيات استدعاء الأدوات.
المخرجات المنظمة
يتم دعم المخرجات المنظمة عن طريق توفير مخطط JSON في معامل format. سيقوم النموذج بتوليد استجابة تطابق المخطط. راجع المثال طلب محادثة (مخرجات منظمة) أدناه.
الأمثلة
طلب محادثة (بث متدفق)
الطلب
إرسال رسالة محادثة مع استجابة بث متدفق.
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "why is the sky blue? "
}
]
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
json
{
"model": "llama3. 2",
"created_at": "2023-08-04T08:52:19. 385406455-07:00",
"message": {
"role": "assistant",
"content": "The",
"images": null
},
"done": false
}الاستجابة النهائية:
json
{
"model": "llama3. 2",
"created_at": "2023-08-04T19:22:45. 499127Z",
"message": {
"role": "assistant",
"content": ""
},
"done": true,
"total_duration": 4883583458,
"load_duration": 1334875,
"prompt_eval_count": 26,
"prompt_eval_duration": 342546000,
"eval_count": 282,
"eval_duration": 4535599000
}طلب محادثة (بث متدفق مع أدوات)
الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "what is the weather in tokyo? "
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in a given city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to get the weather for"
}
},
"required": ["city"]
}
}
}
],
"stream": true
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
json
{
"model": "llama3. 2",
"created_at": "2025-07-07T20:22:19. 184789Z",
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": {
"city": "Tokyo"
}
}
}
]
},
"done": false
}الاستجابة النهائية:
json
{
"model": "llama3. 2",
"created_at": "2025-07-07T20:22:19. 19314Z",
"message": {
"role": "assistant",
"content": ""
},
"done_reason": "stop",
"done": true,
"total_duration": 182242375,
"load_duration": 41295167,
"prompt_eval_count": 169,
"prompt_eval_duration": 24573166,
"eval_count": 15,
"eval_duration": 115959084
}طلب محادثة (بدون بث متدفق)
الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "why is the sky blue? "
}
],
"stream": false
}'الاستجابة
json
{
"model": "llama3. 2",
"created_at": "2023-12-12T14:13:43. 416799Z",
"message": {
"role": "assistant",
"content": "Hello! How are you today? "
},
"done": true,
"total_duration": 5191566416,
"load_duration": 2154458,
"prompt_eval_count": 26,
"prompt_eval_duration": 383809000,
"eval_count": 298,
"eval_duration": 4799921000
}طلب محادثة (بدون بث متدفق، مع أدوات)
الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "what is the weather in tokyo? "
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in a given city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to get the weather for"
}
},
"required": ["city"]
}
}
}
],
"stream": false
}'الاستجابة
json
{
"model": "llama3. 2",
"created_at": "2025-07-07T20:32:53. 844124Z",
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": {
"city": "Tokyo"
}
}
}
]
},
"done_reason": "stop",
"done": true,
"total_duration": 3244883583,
"load_duration": 2969184542,
"prompt_eval_count": 169,
"prompt_eval_duration": 141656333,
"eval_count": 18,
"eval_duration": 133293625
}طلب محادثة (مخرجات منظمة)
الطلب
shell
curl -X POST http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
"model": "llama3. 1",
"messages": [{"role": "user", "content": "Ollama is 22 years old and busy saving the world. Return a JSON object with the age and availability. "}],
"stream": false,
"format": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"available": {
"type": "boolean"
}
},
"required": [
"age",
"available"
]
},
"options": {
"temperature": 0
}
}'الاستجابة
json
{
"model": "llama3. 1",
"created_at": "2024-12-06T00:46:58. 265747Z",
"message": {
"role": "assistant",
"content": "{\"age\": 22, \"available\": false}"
},
"done_reason": "stop",
"done": true,
"total_duration": 2254970291,
"load_duration": 574751416,
"prompt_eval_count": 34,
"prompt_eval_duration": 1502000000,
"eval_count": 12,
"eval_duration": 175000000
}طلب محادثة (مع سجل المحادثات)
إرسال رسالة محادثة مع سجل محادثات. يمكنك استخدام نفس النهج لبدء المحادثة باستخدام الاستفهام متعدد اللقطات (multi-shot) أو الاستفهام عبر سلسلة التفكير (chain-of-thought).
الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "why is the sky blue? "
},
{
"role": "assistant",
"content": "due to rayleigh scattering. "
},
{
"role": "user",
"content": "how is that different than mie scattering? "
}
]
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
json
{
"model": "llama3. 2",
"created_at": "2023-08-04T08:52:19. 385406455-07:00",
"message": {
"role": "assistant",
"content": "The"
},
"done": false
}الاستجابة النهائية:
json
{
"model": "llama3. 2",
"created_at": "2023-08-04T19:22:45. 499127Z",
"done": true,
"total_duration": 8113331500,
"load_duration": 6396458,
"prompt_eval_count": 61,
"prompt_eval_duration": 398801000,
"eval_count": 468,
"eval_duration": 7701267000
}طلب محادثة (مع سجل محادثات، مع أدوات)
الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "what is the weather in Toronto? "
},
// الرسالة من النموذج المضافة إلى سجل المحادثات
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": {
"city": "Toronto"
}
}
}
]
},
// نتيجة استدعاء الأداة المضافة إلى سجل المحادثات
{
"role": "tool",
"content": "11 degrees celsius",
"tool_name": "get_weather"
}
],
"stream": false,
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in a given city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to get the weather for"
}
},
"required": ["city"]
}
}
}
]
}'الاستجابة
json
{
"model": "llama3. 2",
"created_at": "2025-07-07T20:43:37. 688511Z",
"message": {
"role": "assistant",
"content": "The current temperature in Toronto is 11°C. "
},
"done_reason": "stop",
"done": true,
"total_duration": 890771750,
"load_duration": 707634750,
"prompt_eval_count": 94,
"prompt_eval_duration": 91703208,
"eval_count": 11,
"eval_duration": 90282125
}طلب محادثة (مع صور)
الطلب
إرسال رسالة محادثة مع صور. يجب توفير الصور كمصفوفة، مع ترميز كل صورة بشكل منفصل بتنسيق Base64.
shell
curl http://localhost:11434/api/chat -d '{
"model": "llava",
"messages": [
{
"role": "user",
"content": "what is in this image?json
",
"images": ["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"]
}
]
}'الاستجابة
json
{
"model": "llava",
"created_at": "2023-12-13T22:42:50. 203334Z",
"message": {
"role": "assistant",
"content": " The image features a cute, little pig with an angry facial expression. It's wearing a heart on its shirt and is waving in the air. This scene appears to be part of a drawing or sketching project. ",
"images": null
},
"done": true,
"total_duration": 1668506709,
"load_duration": 1986209,
"prompt_eval_count": 26,
"prompt_eval_duration": 359682000,
"eval_count": 83,
"eval_duration": 1303285000
}طلب محادثة (مخرجات قابلة للتكرار)
الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "Hello! "
}
],
"options": {
"seed": 101,
"temperature": 0
}
}'الاستجابة
json
{
"model": "llama3. 2",
"created_at": "2023-12-12T14:13:43. 416799Z",
"message": {
"role": "assistant",
"content": "Hello! How are you today? "
},
"done": true,
"total_duration": 5191566416,
"load_duration": 2154458,
"prompt_eval_count": 26,
"prompt_eval_duration": 383809000,
"eval_count": 298,
"eval_duration": 4799921000
}طلب محادثة (مع الأدوات)
الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": [
{
"role": "user",
"content": "What is the weather today in Paris? "
}
],
"stream": false,
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location to get the weather for, e. g. San Francisco, CA"
},
"format": {
"type": "string",
"description": "The format to return the weather in, e. g. 'celsius' or 'fahrenheit'",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location", "format"]
}
}
}
]
}'الاستجابة
json
{
"model": "llama3. 2",
"created_at": "2024-07-22T20:33:28. 123648Z",
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": {
"format": "celsius",
"location": "Paris, FR"
}
}
}
]
},
"done_reason": "stop",
"done": true,
"total_duration": 885095291,
"load_duration": 3753500,
"prompt_eval_count": 122,
"prompt_eval_duration": 328493000,
"eval_count": 33,
"eval_duration": 552222000
}تحميل نموذج
إذا كانت مصفوفة الرسائل فارغة، سيتم تحميل النموذج في الذاكرة. ##### الطلب
shell
curl http://localhost:11434/api/chat -d '{
"model": "llama3. 2",
"messages": []
}'الاستجابة
json
{
"model": "llama3. 2",
"created_at": "2024-09-12T21:17:29. 110811Z",
"message": {
"role": "assistant",
"content": ""
},
"done_reason": "load",
"done": true
}إلغاء تحميل نموذج
إذا كانت مصفوفة الرسائل فارغة وتم تعيين المعامل keep_alive إلى 0، سيتم إلغاء تحميل النموذج من الذاكرة. ##### الاستجابة
يتم إرجاع كائن JSON واحد:
json
{
"model": "llama3. 2",
"created_at": "2024-09-12T21:33:17. 547535Z",
"message": {
"role": "assistant",
"content": ""
},
"done_reason": "unload",
"done": true
}إنشاء نموذج
POST /api/createإنشاء نموذج من:
- نموذج آخر؛
- دليل safetensors؛ أو
- ملف GGUF.
إذا كنت تقوم بإنشاء نموذج من دليل safetensors أو من ملف GGUF، فيجب عليك إنشاء blob لكل ملف، ثم استخدام اسم الملف وتجزئة SHA256 المرتبطة بكل blob في الحقل files.
المعاملات
model: اسم النموذج المراد إنشاؤهfrom: (اختياري) اسم نموذج موجود لإنشاء النموذج الجديد منهfiles: (اختياري) قاموس بأسماء الملفات إلى تجزئات SHA256 لكائنات blob لإنشاء النموذج منهاadapters: (اختياري) قاموس بأسماء الملفات إلى تجزئات SHA256 لكائنات blob الخاصة بمحولات LORAtemplate: (اختياري) قالب الموجه للنموذجrenderer: (اختياري) اسم أداة العرض للنموذجparser: (اختياري) اسم المحلل للنموذجlicense: (اختياري) سلسلة نصية أو قائمة سلاسل نصية تحتوي على الرخصة أو الرخص الخاصة بالنموذجsystem: (اختياري) سلسلة نصية تحتوي على الموجه النظامي للنموذجparameters: (اختياري) قاموس بالمعاملات الخاصة بالنموذج (راجع Modelfile لمعرفة قائمة بالمعاملات)messages: (اختياري) قائمة بكائنات الرسائل المستخدمة لإنشاء محادثةstream: (اختياري) إذا كانت القيمةfalse، فسيتم إرجاع الاستجابة ككائن استجابة واحد، بدلاً من تدفق من الكائناتquantize(اختياري): تكميم نموذج غير مُكمَّم (مثلًا float16)
أنواع التكميم
| النوع | موصى به |
|---|---|
| q4_K_M | * |
| q4_K_S | |
| q8_0 | * |
أمثلة
إنشاء نموذج جديد
إنشاء نموذج جديد من نموذج موجود.
الطلب
shell
curl http://localhost:11434/api/create -d '{
"model": "mario",
"from": "llama3.2",
"system": "You are Mario from Super Mario Bros."
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
json
{"status":"reading model metadata"}
{"status":"creating system layer"}
{"status":"using already created layer sha256:22f7f8ef5f4c791c1b03d7eb414399294764d7cc82c7e94aa81a1feb80a983a2"}
{"status":"using already created layer sha256:8c17c2ebb0ea011be9981cc3922db8ca8fa61e828c5d3f44cb6ae342bf80460b"}
{"status":"using already created layer sha256:7c23fb36d80141c4ab8cdbb61ee4790102ebd2bf7aeff414453177d4f2110e5d"}
{"status":"using already created layer sha256:2e0493f67d0c8c9c68a8aeacdf6a38a2151cb3c4c1d42accf296e19810527988"}
{"status":"using already created layer sha256:2759286baa875dc22de5394b4a925701b1896a7e3f8e53275c36f75a877a82c9"}
{"status":"writing layer sha256:df30045fe90f0d750db82a058109cecd6d4de9c90a3d75b19c09e5f64580bb42"}
{"status":"writing layer sha256:f18a68eb09bf925bb1b669490407c1b1251c5db98dc4d3d81f3088498ea55690"}
{"status":"writing manifest"}
{"status":"success"}تكميم نموذج
تكميم نموذج غير مُكمَّم.
الطلب
shell
curl http://localhost:11434/api/create -d '{
"model": "llama3.2:quantized",
"from": "llama3.2:3b-instruct-fp16",
"quantize": "q4_K_M"
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
json
{"status":"quantizing F16 model to Q4_K_M","digest":"0","total":6433687776,"completed":12302}
{"status":"quantizing F16 model to Q4_K_M","digest":"0","total":6433687776,"completed":6433687552}
{"status":"verifying conversion"}
{"status":"creating new layer sha256:fb7f4f211b89c6c4928ff4ddb73db9f9c0cfca3e000c3e40d6cf27ddc6ca72eb"}
{"status":"using existing layer sha256:966de95ca8a62200913e3f8bfbf84c8494536f1b94b49166851e76644e966396"}
{"status":"using existing layer sha256:fcc5a6bec9daf9b561a68827b67ab6088e1dba9d1fa2a50d7bbcc8384e0a265d"}
{"status":"using existing layer sha256:a70ff7e570d97baaf4e62ac6e6ad9975e04caa6d900d3742d37698494479e0cd"}
{"status":"using existing layer sha256:56bb8bd477a519ffa694fc449c2413c6f0e1d3b1c88fa7e3c9d88d3ae49d4dcb"}
{"status":"writing manifest"}
{"status":"success"}إنشاء نموذج من ملف GGUF
إنشاء نموذج من ملف GGUF. يجب ملء المعامل files باسم الملف وتجزئة SHA256 لملف GGUF الذي ترغب في استخدامه. استخدم /api/blobs/:digest لدفع ملف GGUF إلى الخادم قبل استدعاء API هذه.
الطلب
shell
curl http://localhost:11434/api/create -d '{
"model": "my-gguf-model",
"files": {
"test.gguf": "sha256:432f310a77f4650a88d0fd59ecdd7cebed8d684bafea53cbff0473542964f0c3"
}
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
json
{"status":"parsing GGUF"}
{"status":"using existing layer sha256:432f310a77f4650a88d0fd59ecdd7cebed8d684bafea53cbff0473542964f0c3"}
{"status":"writing manifest"}
{"status":"success"}إنشاء نموذج من دليل Safetensors
يجب أن يتضمن المعامل files قاموسًا بالملفات الخاصة بنموذج safetensors، والذي يحتوي على أسماء الملفات وتجزئة SHA256 لكل ملف. استخدم /api/blobs/:digest لدفع كل ملف إلى الخادم أولاً قبل استدعاء API هذه. ستبقى الملفات في ذاكرة التخزين المؤقت حتى يتم إعادة تشغيل خادم Ollama.
الطلب
shell
curl http://localhost:11434/api/create -d '{
"model": "fred",
"files": {
"config.json": "sha256:dd3443e529fb2290423a0c65c2d633e67b419d273f170259e27297219828e389",
"generation_config.json": "sha256:88effbb63300dbbc7390143fbbdd9d9fa50587b37e8bfd16c8c90d4970a74a36",
"special_tokens_map.json": "sha256:b7455f0e8f00539108837bfa586c4fbf424e31f8717819a6798be74bef813d05",
"tokenizer.json": "sha256:bbc1904d35169c542dffbe1f7589a5994ec7426d9e5b609d07bab876f32e97ab",
"tokenizer_config.json": "sha256:24e8a6dc2547164b7002e3125f10b415105644fcf02bf9ad8b674c87b1eaaed6",
"model.safetensors": "sha256:1ff795ff6a07e6a68085d206fb84417da2f083f68391c2843cd2b8ac6df8538f"
}
}'الاستجابة
يتم إرجاع تدفق من كائنات JSON:
shell
{"status":"converting model"}
{"status":"creating new layer sha256:05ca5b813af4a53d2c2922933936e398958855c44ee534858fcfd830940618b6"}
{"status":"using autodetected template llama3-instruct"}
{"status":"using existing layer sha256:56bb8bd477a519ffa694fc449c2413c6f0e1d3b1c88fa7e3c9d88d3ae49d4dcb"}
{"status":"writing manifest"}
{"status":"success"}التحقق من وجود كائن ثنائي كبير (Blob)
shell
HEAD /api/blobs/:digestيتأكد من وجود كائن الملف الثنائي الكبير (Blob) المستخدم لإنشاء نموذج على الخادم. هذا الفحص يتم على خادم Ollama الخاص بك وليس على ollama.com.
معلمات الاستعلام
digest: التجزئة SHA256 للكائن الثنائي الكبير (Blob)
أمثلة
الطلب
shell
curl -I http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2الاستجابة
يُرجع 200 OK إذا كان الكائن الثنائي الكبير موجودًا، و 404 Not Found إذا لم يكن موجودًا.
دفع كائن ثنائي كبير (Blob)
POST /api/blobs/:digestارفع ملفًا إلى خادم Ollama لإنشاء "كائن ثنائي كبير" (Blob).
معلمات الاستعلام
digest: التجزئة SHA256 المتوقعة للملف
أمثلة
الطلب
shell
curl -T model.gguf -X POST http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2الاستجابة
يُرجع 201 Created إذا تم إنشاء الكائن الثنائي الكبير بنجاح، و 400 Bad Request إذا كانت التجزئة المستخدمة غير متوقعة.
قائمة النماذج المحلية
GET /api/tagsيعرض النماذج المتوفرة محليًا.
أمثلة
الطلب
shell
curl http://localhost:11434/api/tagsالاستجابة
سيتم إرجاع كائن JSON واحد.
json
{
"models": [
{
"name": "deepseek-r1:latest",
"model": "deepseek-r1:latest",
"modified_at": "2025-05-10T08:06:48.639712648-07:00",
"size": 4683075271,
"digest": "0a8c266910232fd3291e71e5ba1e058cc5af9d411192cf88b6d30e92b6e73163",
"details": {
"parent_model": "",
"format": "gguf",
"family": "qwen2",
"families": ["qwen2"],
"parameter_size": "7.6B",
"quantization_level": "Q4_K_M"
}
},
{
"name": "llama3.2:latest",
"model": "llama3.2:latest",
"modified_at": "2025-05-04T17:37:44.706015396-07:00",
"size": 2019393189,
"digest": "a80c4f17acd55265feec403c7aef86be0c25983ab279d83f3bcd3abbcb5b8b72",
"details": {
"parent_model": "",
"format": "gguf",
"family": "llama",
"families": ["llama"],
"parameter_size": "3.2B",
"quantization_level": "Q4_K_M"
}
}
]
}عرض معلومات النموذج
POST /api/showيعرض معلومات عن النموذج بما في ذلك التفاصيل وملف النموذج (Modelfile) والقالب والمعلمات والترخيص وموجه النظام.
المعلمات
model: اسم النموذج المراد عرضهverbose: (اختياري) إذا تم تعيينه إلىtrue، فإنه يُرجع البيانات الكاملة لحقول الاستجابة المفصلة
أمثلة
الطلب
shell
curl http://localhost:11434/api/show -d '{
"model": "llava"
}'الاستجابة
json5
{
modelfile: '# Modelfile generated by "ollama show"\n# To build a new Modelfile based on this one, replace the FROM line with:\n# FROM llava:latest\n\nFROM /Users/matt/.ollama/models/blobs/sha256:200765e1283640ffbd013184bf496e261032fa75b99498a9613be4e94d63ad52\nTEMPLATE """{{ .System }}\nUSER: {{ .Prompt }}\nASSISTANT: """\nPARAMETER num_ctx 4096\nPARAMETER stop "\u003c/s\u003e"\nPARAMETER stop "USER:"\nPARAMETER stop "ASSISTANT:"',
parameters: 'num_keep 24\nstop "<|start_header_id|>"\nstop "<|end_header_id|>"\nstop "<|eot_id|>"',
template: "{{ if .System }}<|start_header_id|>system<|end_header_id|>\n\n{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>\n\n{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>\n\n{{ .Response }}<|eot_id|>",
details: {
parent_model: "",
format: "gguf",
family: "llama",
families: ["llama"],
parameter_size: "8.0B",
quantization_level: "Q4_0",
},
model_info: {
"general.architecture": "llama",
"general.file_type": 2,
"general.parameter_count": 8030261248,
"general.quantization_version": 2,
"llama.attention.head_count": 32,
"llama.attention.head_count_kv": 8,
"llama.attention.layer_norm_rms_epsilon": 0.00001,
"llama.block_count": 32,
"llama.context_length": 8192,
"llama.embedding_length": 4096,
"llama.feed_forward_length": 14336,
"llama.rope.dimension_count": 128,
"llama.rope.freq_base": 500000,
"llama.vocab_size": 128256,
"tokenizer.ggml.bos_token_id": 128000,
"tokenizer.ggml.eos_token_id": 128009,
"tokenizer.ggml.merges": [], // populates if `verbose=true`
"tokenizer.ggml.model": "gpt2",
"tokenizer.ggml.pre": "llama-bpe",
"tokenizer.ggml.token_type": [], // populates if `verbose=true`
"tokenizer.ggml.tokens": [], // populates if `verbose=true`
},
capabilities: ["completion", "vision"],
}نسخ نموذج
POST /api/copyينسخ نموذجًا. ينشئ نموذجًا باسم مختلف من نموذج موجود.
أمثلة
الطلب
shell
curl http://localhost:11434/api/copy -d '{
"source": "llama3.2",
"destination": "llama3-backup"
}'الاستجابة
يُرجع 200 OK في حال النجاح، أو 404 Not Found إذا لم يكن النموذج المصدر موجودًا.
حذف نموذج
DELETE /api/deleteيحذف نموذجًا وجميع بياناته.
المعلمات
model: اسم النموذج المراد حذفه
أمثلة
الطلب
shell
curl -X DELETE http://localhost:11434/api/delete -d '{
"model": "llama3:13b"
}'الاستجابة
يُرجع 200 OK في حال النجاح، أو 404 Not Found إذا كان النموذج المراد حذفه غير موجود.
سحب نموذج
POST /api/pullيقوم بتنزيل نموذج من مكتبة ollama. يتم استئناف عمليات السحب الملغاة من النقطة التي توقفت فيها، وستشارك الاستدعاءات المتعددة نفس تقدم التنزيل.
المعلمات
model: اسم النموذج المراد سحبهinsecure: (اختياري) يسمح باتصالات غير آمنة بالمكتبة. استخدم هذا الخيار فقط إذا كنت تسحب من مكتبتك الخاصة أثناء التطوير.stream: (اختياري) إذا تم تعيينه إلىfalse، فسيتم إرجاع الاستجابة ككائن استجابة واحد بدلاً من تدفق من الكائنات
أمثلة
الطلب
shell
curl http://localhost:11434/api/pull -d '{
"model": "llama3.2"
}'الاستجابة
إذا لم يتم تحديد stream، أو تم تعيينه إلى true، فسيتم إرجاع تدفق من كائنات JSON:
الكائن الأول هو البيان (manifest):
json
{
"status": "pulling manifest"
}ثم توجد سلسلة من استجابات التنزيل. حتى يكتمل أي جزء من التنزيل، قد لا يتم تضمين مفتاح completed. يعتمد عدد الملفات المراد تنزيلها على عدد الطبقات المحددة في البيان.
json
{
"status": "pulling digestname",
"digest": "digestname",
"total": 2142590208,
"completed": 241970
}بعد تنزيل جميع الملفات، تكون الاستجابات النهائية كما يلي:
json
{
"status": "verifying sha256 digest"
}
{
"status": "writing manifest"
}
{
"status": "removing any unused layers"
}
{
"status": "success"
}إذا تم تعيين stream إلى false، فإن الاستجابة تكون كائن JSON واحد:
json
{
"status": "success"
}دفع نموذج
POST /api/pushارفع نموذجًا إلى مكتبة نماذج. يتطلب التسجيل في ollama.ai وإضافة مفتاح عام أولاً.
المعلمات
model: اسم النموذج المراد دفعه بالشكل<namespace>/<model>:<tag>insecure: (اختياري) يسمح باتصالات غير آمنة بالمكتبة. استخدم هذا الخيار فقط إذا كنت تدفع إلى مكتبتك الخاصة أثناء التطوير.stream: (اختياري) إذا تم تعيينه إلىfalse، فسيتم إرجاع الاستجابة ككائن استجابة واحد بدلاً من تدفق من الكائنات
أمثلة
الطلب
shell
curl http://localhost:11434/api/push -d '{
"model": "mattw/pygmalion:latest"
}'الاستجابة
إذا لم يتم تحديد stream، أو تم تعيينه إلى true، فسيتم إرجاع تدفق من كائنات JSON:
json
{ "status": "retrieving manifest" }ثم:
json
{
"status": "starting upload",
"digest": "sha256:bc07c81de745696fdf5afca05e065818a8149fb0c77266fb584d9b2cba3711ab",
"total": 1928429856
}ثم توجد سلسلة من استجابات الرفع:
json
{
"status": "starting upload",
"digest": "sha256:bc07c81de745696fdf5afca05e065818a8149fb0c77266fb584d9b2cba3711ab",
"total": 1928429856
}أخيرًا، عند اكتمال الرفع:
json
{"status":"pushing manifest"}
{"status":"success"}إذا تم تعيين stream إلى false، فإن الاستجابة تكون كائن JSON واحد:
json
{ "status": "success" }إنشاء التضمينات (Embeddings)
POST /api/embedإنشاء التضمينات من نموذج
المعلمات
model: اسم النموذج الذي سيتم إنشاء التضمينات منهinput: نص أو قائمة نصوص لإنشاء التضمينات لها
معلمات متقدمة:
truncate: يقطع نهاية كل إدخال ليتناسب مع طول السياق. يُرجع خطأ إذا كانfalseوتم تجاوز طول السياق. القيمة الافتراضية هيtrueoptions: معلمات نموذج إضافية مذكورة في وثائق Modelfile مثلtemperaturekeep_alive: يتحكم في مدة بقاء النموذج محملاً في الذاكرة بعد الطلب (الافتراضي:5m)dimensions: عدد الأبعاد للتضمين
أمثلة
الطلب
shell
curl http://localhost:11434/api/embed -d '{
"model": "all-minilm",
"input": "Why is the sky blue?"
}'الاستجابة
json
{
"model": "all-minilm",
"embeddings": [
[
0.010071029, -0.0017594862, 0.05007221, 0.04692972, 0.054916814,
0.008599704, 0.105441414, -0.025878139, 0.12958129, 0.031952348
]
],
"total_duration": 14143917,
"load_duration": 1019500,
"prompt_eval_count": 8
}طلب (إدخال متعدد)
shell
curl http://localhost:11434/api/embed -d '{
"model": "all-minilm",
"input": ["Why is the sky blue?", "Why is the grass green?"]
}'الاستجابة
json
{
"model": "all-minilm",
"embeddings": [
[
0.010071029, -0.0017594862, 0.05007221, 0.04692972, 0.054916814,
0.008599704, 0.105441414, -0.025878139, 0.12958129, 0.031952348
],
[
-0.0098027075, 0.06042469, 0.025257962, -0.006364387, 0.07272725,
0.017194884, 0.09032035, -0.051705178, 0.09951512, 0.09072481
]
]
}قائمة النماذج قيد التشغيل
GET /api/psيعرض النماذج المحملة حاليًا في الذاكرة.
أمثلة
الطلب
shell
curl http://localhost:11434/api/psالاستجابة
سيتم إرجاع كائن JSON واحد.
json
{
"models": [
{
"name": "mistral:latest",
"model": "mistral:latest",
"size": 5137025024,
"digest": "2ae6f6dd7a3dd734790bbbf58b8909a606e0e7e97e94b7604e0aa7ae4490e6d8",
"details": {
"parent_model": "",
"format": "gguf",
"family": "llama",
"families": ["llama"],
"parameter_size": "7.2B",
"quantization_level": "Q4_0"
},
"expires_at": "2024-06-04T14:38:31.83753-07:00",
"size_vram": 5137025024
}
]
}إنشاء تضمين (Embedding)
ملاحظة: تم استبدال هذه النقطة النهائية بـ
/api/embed
POST /api/embeddingsإنشاء التضمينات من نموذج
المعلمات
model: اسم النموذج الذي سيتم إنشاء التضمينات منهprompt: النص الذي سيتم إنشاء التضمينات له
معلمات متقدمة:
options: معلمات نموذج إضافية مذكورة في وثائق Modelfile مثلtemperaturekeep_alive: يتحكم في مدة بقاء النموذج محملاً في الذاكرة بعد الطلب (الافتراضي:5m)
أمثلة
الطلب
shell
curl http://localhost:11434/api/embeddings -d '{
"model": "all-minilm",
"prompt": "Here is an article about llamas..."
}'الاستجابة
json
{
"embedding": [
0.5670403838157654, 0.009260174818336964, 0.23178744316101074,
-0.2916173040866852, -0.8924556970596313, 0.8785552978515625,
-0.34576427936553955, 0.5742510557174683, -0.04222835972905159,
-0.137906014919281
]
}الإصدار
GET /api/versionاسترداد إصدار Ollama
أمثلة
الطلب
shell
curl http://localhost:11434/api/versionالاستجابة
json
{
"version": "0.5.1"
}الميزات التجريبية
إنشاء الصور (تجريبي)
WARNING
إنشاء الصور ميزة تجريبية وقد تتغير في الإصدارات المستقبلية.
يتم دعم إنشاء الصور الآن من خلال نقطة /api/generate القياسية عند استخدام نماذج إنشاء الصور. تكتشف الواجهة البرمجية تلقائيًا عند استخدام نموذج إنشاء صور.
راجع قسم إنشاء إكمال للحصول على وثائق الواجهة البرمجية الكاملة. يتم توثيق معلمات إنشاء الصور التجريبية (width، height، steps) هناك.
مثال
الطلب
shell
curl http://localhost:11434/api/generate -d '{
"model": "x/z-image-turbo",
"prompt": "a sunset over mountains",
"width": 1024,
"height": 768
}'الاستجابة (تدفق)
تحديثات التقدم أثناء الإنشاء:
json
{
"model": "x/z-image-turbo",
"created_at": "2024-01-15T10:30:00.000000Z",
"completed": 5,
"total": 20,
"done": false
}الاستجابة النهائية
json
{
"model": "x/z-image-turbo",
"created_at": "2024-01-15T10:30:15.000000Z",
"image": "iVBORw0KGgoAAAANSUhEUg...",
"done": true,
"done_reason": "stop",
"total_duration": 15000000000,
"load_duration": 2000000000
}