أدلة SDK
Python
استخدم حزمة openai الرسمية لـ Python مع api14 بضبط base_url وapi_key، مع أمثلة للعميل المتزامن وغير المتزامن والبث والأدوات والأخطاء.
استخدم حزمة openai الرسمية لـ Python مع api14. اضبط base_url وapi_key، واستخدم أي معرّف نموذج (مثل openai/gpt-5-mini) في model.
التثبيت
pip install openai
export API14_API_KEY="sk-api14-..."
الإعداد
from openai import OpenAI
import os
client = OpenAI(
base_url="https://api14.com/api/v1",
api_key=os.environ["API14_API_KEY"],
)
يتوفر أيضًا عميل غير متزامن: from openai import AsyncOpenAI يقبل الوسائط نفسها. استخدمه عند تشغيل طلبات كثيرة في وقت واحد، كما في خادم ويب أو مهمة دفعية:
import asyncio
from openai import AsyncOpenAI
aclient = AsyncOpenAI(base_url="https://api14.com/api/v1", api_key=os.environ["API14_API_KEY"])
async def ask(q):
r = await aclient.chat.completions.create(model="openai/gpt-5-mini", messages=[{"role": "user", "content": q}])
return r.choices[0].message.content
async def main():
return await asyncio.gather(*(ask(q) for q in ["What is RAG?", "What is a token?"]))
answers = asyncio.run(main())
أبقِ التزامن أقل من حد الطلبات في الدقيقة لخطتك. راجع دليل: المعالجة الدفعية.
دون وسائط، يقرأ OpenAI() المتغيرين OPENAI_BASE_URL وOPENAI_API_KEY، فيمكنك توجيه تطبيق قائم إلى api14 من البيئة وحدها:
export OPENAI_BASE_URL="https://api14.com/api/v1"
export OPENAI_API_KEY="sk-api14-..."
المحادثة
result = client.chat.completions.create(
model="openai/gpt-5-mini",
messages=[{"role": "user", "content": "Explain vector databases in two sentences."}],
)
print(result.choices[0].message.content)
البث
stream = client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": "Write a haiku about APIs."}],
stream=True,
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="")
راجع البث.
استدعاء الأدوات
import json
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What's the weather in Istanbul?"}]
while True:
res = client.chat.completions.create(model="openai/gpt-5-mini", messages=messages, tools=tools)
msg = res.choices[0].message
if not msg.tool_calls:
break
messages.append(msg)
for call in msg.tool_calls:
args = json.loads(call.function.arguments)
result = get_weather(**args) # your function
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
print(msg.content)
راجع استدعاء الأدوات.
المخرجات المنظمة
يحوّل client.chat.completions.parse نموذج Pydantic إلى مخطط JSON Schema صارم ويُعيد الكائن المحلَّل. يحتاج إلى إصدار حديث من openai، وفي إصدارات 1.x الأقدم يوجد باسم client.beta.chat.completions.parse. استخدم نموذجًا تتضمن supported_parameters فيه structured_outputs أو response_format:
from pydantic import BaseModel
class Person(BaseModel):
name: str
born: int
city: str
res = client.chat.completions.parse(
model="openai/gpt-5-mini",
messages=[{"role": "user", "content": "Extract: Ada Lovelace, born 1815 in London."}],
response_format=Person,
)
person = res.choices[0].message.parsed # Person(name='Ada Lovelace', born=1815, city='London')
راجع المخرجات المنظمة.
إدخال الصور
import base64
image = base64.b64encode(open("photo.png", "rb").read()).decode()
res = client.chat.completions.create(
model="google/gemini-2.5-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image}"}},
],
}],
)
يعمل عنوان https:// عام أيضًا. راجع الرؤية والملفات.
الصور
result = client.images.generate(
model="openai/gpt-5.4-image-2",
prompt="A minimalist product photo of a ceramic mug on a wooden table",
n=1,
extra_body={"aspect_ratio": "1:1"},
)
open("image.png", "wb").write(base64.b64decode(result.data[0].b64_json))
المعاملات التي لا يعرفها SDK (aspect_ratio وprovider وmodels وreasoning) توضع في extra_body.
الكلام والتفريغ النصي
audio = client.audio.speech.create(
model="openai/gpt-4o-mini-tts",
input="Hello from api14!",
voice="alloy",
)
audio.write_to_file("speech.mp3")
text = client.audio.transcriptions.create(
model="openai/whisper-1",
file=open("speech.mp3", "rb"),
)
print(text.text)
الأخطاء
import openai
try:
client.chat.completions.create(
model="openai/gpt-5-mini",
messages=[{"role": "user", "content": "Hi"}],
)
except openai.APIStatusError as e:
if e.status_code == 402:
print("Balance too low, add funds:", e.code) # insufficient_balance
elif e.status_code == 429:
print("Retry after", e.response.headers.get("retry-after"), "s:", e.code) # rate_limited
else:
raise
راجع الأخطاء.
المهلات وإعادة المحاولة
يعيد SDK افتراضيًا محاولة أخطاء الاتصال والاستجابات 408 و409 و429 و5xx مرتين مع تراجع أُسّي يحترم Retry-After. المهلة الافتراضية 10 دقائق. اضبطهما على العميل، أو لكل استدعاء عبر with_options:
import httpx
client = OpenAI(
base_url="https://api14.com/api/v1",
api_key=os.environ["API14_API_KEY"],
timeout=httpx.Timeout(60.0, connect=5.0),
max_retries=4,
)
client.with_options(timeout=300, max_retries=0).chat.completions.create(...)
إعادة المحاولة لا تفيد مع daily_limit_reached أو insufficient_balance، فتوقف وأطلق تنبيهًا بدلًا منها. راجع حدود الطلبات.
كل القدرات
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
const result = await client.chat.completions.create({
"model": "openai/gpt-5-mini",
"messages": [
{
"role": "user",
"content": "Explain vector databases in two sentences."
}
]
});
console.log(result.choices[0].message.content);