API یکپارچه
Embedding، تصویر و صدا
چهار endpoint دیگر API یکپارچه همان قرارداد OpenAI را دارند؛ پس با client.embeddings، client.images و client.audio در SDK رسمی OpenAI به مدلهای OpenAI، Google، FLUX، Stability و ElevenLabs دسترسی داری.
Embeddings (بردار معنایی)
https://api.hooshi.ai/v1/embeddingsمتن را به بردار عددی تبدیل میکند؛ پایهٔ جستجوی معنایی، RAG، خوشهبندی و پیشنهاددهی. مدلهای فعلی: openai/text-embedding-3-small، openai/text-embedding-3-large و gemini/gemini-embedding-2.
| پارامتر | نوع | توضیح |
|---|---|---|
modelالزامی | string | شناسهٔ یک مدل از نوع embedding. |
inputالزامی | string | string[] | یک متن یا آرایهای از متنها (برای کارایی بهتر، چند متن را در یک درخواست بفرست). |
dimensionsاختیاری | integer | کوتاهکردن طول بردار (در مدلهایی که پشتیبانی میکنند، مثل text-embedding-3). |
encoding_formatاختیاری | string | float (پیشفرض) یا base64. |
resp = client.embeddings.create(
model="openai/text-embedding-3-small",
input=["هوش مصنوعی چیست؟", "یادگیری ماشین شاخهای از هوش مصنوعی است."],
)
vectors = [d.embedding for d in resp.data]
print(len(vectors), len(vectors[0])) # 2 1536پاسخ همان قالب OpenAI است:
{
"object": "list",
"data": [{ "object": "embedding", "index": 0, "embedding": [0.0123, -0.0456, ...] }],
"model": "openai/text-embedding-3-small",
"usage": { "prompt_tokens": 9, "total_tokens": 9 }
}نمونهٔ کامل جستجوی معنایی و RAG را در نمونهها ببین.
ساخت تصویر
https://api.hooshi.ai/v1/images/generationsیک endpoint برای همهٔ مدلهای تصویری: GPT Image (OpenAI)، Gemini Flash Image، Grok Imagine، FLUX (BFL و Together) و Stable Image. خروجی همیشه بهصورت b64_json (PNG) برمیگردد؛ پس لینک موقتی نداری که منقضی شود.
| پارامتر | نوع | توضیح |
|---|---|---|
promptالزامی | string | توضیح تصویر؛ حداکثر ۳۲٬۰۰۰ کاراکتر. پرامپت انگلیسی معمولاً نتیجهٔ دقیقتری میدهد. |
modelاختیاری | string | پیشفرض openai/gpt-image-2. هر مدل از نوع image. |
nاختیاری | integer | تعداد تصویر، ۱ تا ۴. پیشفرض ۱. |
sizeاختیاری | string | مثلاً 1024x1024، 1536x1024 یا auto. برای Stability به نسبت تصویر تبدیل میشود. |
qualityاختیاری | string | برای مدلهای OpenAI: low، medium، high یا auto. |
backgroundاختیاری | string | برای مدلهای OpenAI: transparent برای پسزمینهٔ شفاف (در مدلهای دارای این قابلیت). |
aspect_ratioاختیاری | string | برای Stability و مدلهای سازگار مثل Grok: 16:9، 1:1، 9:16 و… . |
import base64
resp = client.images.generate(
model="openai/gpt-image-2",
prompt="A fluffy cream Persian robot cat with a teal headset, soft 3D, studio light",
size="1536x1024",
quality="high",
)
open("cat.png", "wb").write(base64.b64decode(resp.data[0].b64_json)){
"created": 1791590400,
"data": [{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA...", "revised_prompt": "..." }],
"usage": { "prompt_tokens": 38, "completion_tokens": 4160, "total_tokens": 4198, "prompt_tokens_details": { "cached_tokens": 0 } }
}هزینهٔ تصویر
مدلهای GPT Image بر اساس توکن ورودی و خروجی (که به اندازه و کیفیت بستگی دارد) و بقیهٔ مدلها بر اساس تعداد تصویر قیمتگذاری میشوند. قیمت دقیق هر مدل در فهرست مدلها است. برای ویرایش تصویر با OpenAI از API بومی و مسیر /images/edits استفاده کن.
تبدیل متن به صدا (TTS)
https://api.hooshi.ai/v1/audio/speechمتن را به فایل صوتی MP3 تبدیل میکند. با مدلهای OpenAI (مثل openai/gpt-4o-mini-tts) یا ElevenLabs (مثل elevenlabs/eleven_v4 با بهترین کیفیت فارسی). پاسخ مستقیماً بایتهای صوتی با Content-Type: audio/mpeg است.
| پارامتر | نوع | توضیح |
|---|---|---|
inputالزامی | string | متنی که خوانده میشود؛ حداکثر ۱۰٬۰۰۰ کاراکتر. |
voiceالزامی | string | برای OpenAI نام صدا (مثلاً alloy، nova، coral)؛ برای ElevenLabs شناسهٔ صدا (voice_id). |
modelاختیاری | string | پیشفرض openai/gpt-4o-mini-tts. هر مدل از نوع tts. |
instructionsاختیاری | string | برای gpt-4o-mini-tts: لحن و سبک خواندن، مثلاً «گرم و آرام، مثل گوینده رادیو». |
speedاختیاری | number | سرعت خواندن (مثلاً 0.9 تا 1.2). |
with client.audio.speech.with_streaming_response.create(
model="openai/gpt-4o-mini-tts",
voice="coral",
input="سلام! به هوشی خوش اومدی. امروز چطور میتونم کمکت کنم؟",
instructions="گرم، صمیمی و با سرعت متوسط",
) as resp:
resp.stream_to_file("welcome.mp3")هزینهٔ TTS بر اساس هر ۱۰۰۰ کاراکتر متن ورودی محاسبه میشود. برای قابلیتهای پیشرفتهٔ ElevenLabs (استریم، timestamp، دیالوگ چندگوینده، تغییر صدا، افکت و موسیقی) از API بومی ElevenLabs استفاده کن.
تبدیل صدا به متن (STT)
https://api.hooshi.ai/v1/audio/transcriptionsفایل صوتی (mp3، wav، m4a، webm، ogg و…) تا ۵۰ مگابایت را به متن تبدیل میکند. مدلها: openai/gpt-transcribe (پیشفرض)، openai/gpt-4o-transcribe، groq/whisper-large-v3 (سریع و ارزان) و elevenlabs/scribe_v2 (با زمانبندی کلمهبهکلمه).
| پارامتر | نوع | توضیح |
|---|---|---|
fileالزامی | file | فایل صوتی، حداکثر ۵۰ مگابایت. |
modelاختیاری | string | پیشفرض openai/gpt-transcribe. هر مدل از نوع stt. |
languageاختیاری | string | کد زبان ISO-639-1، مثلاً fa؛ دقت و سرعت را بالا میبرد. |
promptاختیاری | string | متن راهنما (اسامی خاص، اصطلاحات) برای مدلهای OpenAI. |
with open("meeting.m4a", "rb") as f:
tr = client.audio.transcriptions.create(model="openai/gpt-transcribe", file=f, language="fa")
print(tr.text){
"text": "سلام، جلسهٔ امروز دربارهٔ برنامهٔ فصل بعد است...",
"language": "fa",
"duration": 312.4,
"words": [{ "text": "سلام", "start": 0.12, "end": 0.48 }, ...]
}| فیلد | توضیح |
|---|---|
text | متن کامل. |
duration | طول فایل به ثانیه؛ مبنای محاسبهٔ هزینه (قیمت به ازای هر دقیقه). |
language | زبان تشخیصدادهشده (در صورت ارائه توسط مدل). |
words | زمانبندی کلمهها؛ فقط برای مدلهایی که ارائه میکنند (مثل scribe_v2). |
ساخت ویدیو (ناهمگام)
https://api.hooshi.ai/v1/videosساخت ویدیو از متن با gemini/veo-3.1-generate-preview (ویدیو با صدای همزمان) و xai/grok-imagine-video-1.5. ساخت ویدیو چند دقیقه طول میکشد؛ برای همین پاسخ فوراً با وضعیت in_progress برمیگردد و باید با GET /v1/videos/{id} وضعیت را هر ۵ تا ۱۰ ثانیه بررسی کنی. هزینه (به ازای هر ثانیه ویدیو) فقط وقتی کسر میشود که ویدیو تحویل شود؛ اگر ساخت ناموفق باشد، چیزی کسر نمیشود.
| پارامتر | نوع | توضیح |
|---|---|---|
modelالزامی | string | یک مدل از نوع video. |
promptالزامی | string | توصیف صحنه، حرکت دوربین، حالوهوا و صدا؛ تا ۴۰۰۰ کاراکتر. |
durationاختیاری | integer | طول ویدیو به ثانیه؛ پیشفرض ۸. Veo فقط ۴، ۶ یا ۸ ثانیه را میپذیرد. |
aspect_ratioاختیاری | string | 16:9 (پیشفرض)، 9:16 یا 1:1 (فقط Grok). |
resolutionاختیاری | string | 720p یا 1080p. |
import time, requests
H = {"Authorization": f"Bearer {HOOSHI_API_KEY}"}
job = requests.post("https://api.hooshi.ai/v1/videos", headers=H, json={
"model": "xai/grok-imagine-video-1.5",
"prompt": "نمای هوایی آرام از کوه دماوند هنگام طلوع",
"duration": 8,
}).json()
while job["status"] == "in_progress":
time.sleep(8)
job = requests.get(f"https://api.hooshi.ai/v1/videos/{job['id']}", headers=H).json()
if job["status"] == "completed":
open("video.mp4", "wb").write(requests.get(job["url"], headers=H).content){
"id": "9f1c6f0e-...",
"object": "video",
"model": "xai/grok-imagine-video-1.5",
"status": "completed",
"seconds": 8,
"aspect_ratio": "16:9",
"url": "https://api.hooshi.ai/v1/videos/9f1c6f0e-.../content",
"hooshi": { "cost": 104328, "currency": "IRT" }
}مقادیر status: in_progress، completed و failed (همراه error.message). فایل ویدیو با همان کلید API از آدرس url دانلود میشود.
خطاهای اعتبارسنجی
اگر فیلد الزامی (مثل prompt، input، voice یا file) را نفرستی یا از سقف مجاز بیشتر باشد، پاسخ 422 با قالب اعتبارسنجی برمیگردد:
{
"message": "The voice field is required.",
"errors": { "voice": ["The voice field is required."] }
}