圖片、影片與音訊
圖片和影片先用金鑰查詢模型目錄,檢查具體端點、參數與示例;音訊模型依下方說明選擇。可用性與選項取決於模型及部署,一個模型不一定支援所有媒體類型。示例需要 Python 3 與 requests(python -m pip install requests);請設定 LAZU_API_KEY 及下文模型變數。
生成圖片
將 LAZU_IMAGE_MODEL 設為支援 /v1/images/generations 的模型。回應可能包含 data[].url 或 data[].b64_json,依實際形式讀取。尺寸、品質與格式依模型而定,不要假設生成連結永久有效。
import os
import requests
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
response = requests.post(origin + "/v1/images/generations",
headers={"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]},
json={"model": os.environ["LAZU_IMAGE_MODEL"], "prompt": "A blue ceramic cup"},
timeout=180)
response.raise_for_status()
print(response.json()["data"])提交並輪詢影片
將 LAZU_VIDEO_MODEL 設為支援 /v1/videos 的模型。提交成功回傳 HTTP 202 與任務 ID;用同一金鑰查詢同一任務。pending、running 均未完成;succeeded 提供產物資訊,failed 提供錯誤。本地等待逾時不會取消任務或令任務失敗,應保存 ID 並繼續查詢,不要因等待結束重複建立付費任務。
import os
import time
import requests
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
headers = {"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]}
response = requests.post(origin + "/v1/videos", headers=headers,
json={"model": os.environ["LAZU_VIDEO_MODEL"], "prompt": "Ocean waves at sunrise"},
timeout=180)
response.raise_for_status()
job_id = response.json()["id"]
print("Save job ID:", job_id, flush=True)
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
response = requests.get(origin + "/v1/videos/" + job_id,
headers=headers, timeout=30)
if response.status_code in (429, 503):
retry_after = response.headers.get("Retry-After", "5")
delay = float(retry_after) if retry_after.isdecimal() else 5
if delay >= deadline - time.monotonic():
print("Still waiting; resume GET for job:", job_id)
break
time.sleep(max(1, delay))
continue
response.raise_for_status()
job = response.json()
if job["status"] == "succeeded":
print(job.get("artifact", {}))
break
if job["status"] == "failed":
raise RuntimeError(job.get("error", {"message": "Video failed"}))
time.sleep(5)
else:
print("Still waiting; resume GET for job:", job_id)
# A local timeout does not cancel the remote job. Keep job_id for later GETs.語音生成與轉寫
將 LAZU_AUDIO_MODEL 設為語音生成模型,LAZU_VOICE 設為其支援的音色。/v1/audio/speech 回傳二進位音訊而非 JSON。轉寫需另選相容模型,透過 multipart 向 /v1/audio/transcriptions 上傳本地音訊;兩者是獨立能力。
目錄目前沒有語音生成或轉寫端點類型,僅憑音訊模態無法判斷這兩種能力。請向部署管理員或 Lazu 支援取得已確認的模型 ID、端點與支援的音色,並確認該模型對目前 Key 可用,不要只按音訊模態選模型。將 LAZU_TRANSCRIPTION_MODEL 設為已確認的轉寫模型,LAZU_AUDIO_FILE 設為本地音訊路徑。
import os
from pathlib import Path
import requests
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
headers = {"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]}
response = requests.post(origin + "/v1/audio/speech", headers=headers,
json={"model": os.environ["LAZU_AUDIO_MODEL"], "input": "Hello from Lazu",
"voice": os.environ["LAZU_VOICE"], "response_format": "mp3"}, timeout=180)
response.raise_for_status()
Path("speech.mp3").write_bytes(response.content)import os
import requests
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
with open(os.environ["LAZU_AUDIO_FILE"], "rb") as audio:
response = requests.post(origin + "/v1/audio/transcriptions",
headers={"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]},
data={"model": os.environ["LAZU_TRANSCRIPTION_MODEL"]},
files={"file": audio}, timeout=180)
response.raise_for_status()
print(response.json())錯誤與結果
失敗時保存請求或任務 ID 並查看錯誤碼。若提交逾時且未取得任務 ID,先查詢影片任務清單(GET /v1/videos)或聯絡支援,再決定是否重提。成功任務優先使用 artifact.url;若只有 artifact.file_id,透過 Files API取得。費用按計費說明對帳。