POST /v1/audio/transcriptions بوصفه نموذجًا متعدد الأجزاء يحتوي على حقل file. يفشل التحقق من جسم JSON يحتوي على سلسلة base64. لا يمكن إرسال هذا النموذج إلا من حزمة TypeScript SDK؛ أما في كل لغة أخرى، فأرسله باستخدام عميل HTTP القياسي، كما في الأمثلة أدناه، أو أرسل عنوان URL بدلًا من ذلك (انظر تحويل الصوت إلى نص من عنوان URL).
رفع ملف صوتي
import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("model", "openai/gpt-4o-transcribe");
form.append("language", "en");
form.append("file", new Blob([await readFile("call.mp3")], { type: "audio/mpeg" }), "call.mp3");
const transcript = await client.generateTranscription(form as unknown as Record<string, unknown>);
console.log(transcript.text);
# لا تستطيع generate_transcription() إرسال بيانات متعددة الأجزاء بعد، لذا أرسل النموذج باستخدام HTTPX.
import os
import httpx
with open("call.mp3", "rb") as audio:
response = httpx.post(
"https://api.phaseo.app/v1/audio/transcriptions",
headers={"Authorization": f"Bearer {os.environ['PHASEO_API_KEY']}"},
data={"model": "openai/gpt-4o-transcribe", "language": "en"},
files={"file": ("call.mp3", audio, "audio/mpeg")},
timeout=120,
)
response.raise_for_status()
print(response.json()["text"])
// ترسل CreateTranscription() بيانات JSON، لذا أرسل النموذج باستخدام net/http وmime/multipart.
var body bytes.Buffer
form := multipart.NewWriter(&body)
_ = form.WriteField("model", "openai/gpt-4o-transcribe")
_ = form.WriteField("language", "en")
part, _ := form.CreateFormFile("file", "call.mp3")
audio, _ := os.ReadFile("call.mp3")
_, _ = part.Write(audio)
_ = form.Close()
req, _ := http.NewRequest("POST", "https://api.phaseo.app/v1/audio/transcriptions", &body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("PHASEO_API_KEY"))
req.Header.Set("Content-Type", form.FormDataContentType())
resp, err := http.DefaultClient.Do(req)
// ترسل CreateTranscription() بيانات JSON، لذا أرسل النموذج باستخدام HttpClient.
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new("Bearer", Environment.GetEnvironmentVariable("PHASEO_API_KEY"));
using var form = new MultipartFormDataContent
{
{ new StringContent("openai/gpt-4o-transcribe"), "model" },
{ new StringContent("en"), "language" },
{ new ByteArrayContent(await File.ReadAllBytesAsync("call.mp3")), "file", "call.mp3" },
};
var response = await http.PostAsync("https://api.phaseo.app/v1/audio/transcriptions", form);
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
// ترسل generateTranscription() بيانات JSON، لذا أرسل النموذج باستخدام Guzzle، الذي ثبّته Composer مع حزمة SDK.
require 'vendor/autoload.php';
$http = new GuzzleHttp\Client();
$response = $http->post('https://api.phaseo.app/v1/audio/transcriptions', [
'headers' => ['Authorization' => 'Bearer ' . getenv('PHASEO_API_KEY')],
'multipart' => [
['name' => 'model', 'contents' => 'openai/gpt-4o-transcribe'],
['name' => 'language', 'contents' => 'en'],
['name' => 'file', 'contents' => fopen('call.mp3', 'r'), 'filename' => 'call.mp3'],
],
]);
echo $response->getBody();
# ترسل generate_transcription بيانات JSON، لذا أرسل النموذج باستخدام Net::HTTP.
require 'net/http'
uri = URI('https://api.phaseo.app/v1/audio/transcriptions')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{ENV.fetch('PHASEO_API_KEY')}"
request.set_form(
[['model', 'openai/gpt-4o-transcribe'], ['language', 'en'], ['file', File.open('call.mp3')]],
'multipart/form-data'
)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
puts response.body
// لا ترمّز دوال JSON المساعدة في حزمة SDK البيانات متعددة الأجزاء، لذا أرسل النموذج باستخدام java.net.http.
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.file.Path;
import java.time.Duration;
import java.util.UUID;
String baseUrl = System.getenv().getOrDefault("PHASEO_BASE_URL", "https://api.phaseo.app/v1")
.replaceAll("/+$", "");
String apiKey = System.getenv("PHASEO_API_KEY");
String boundary = "phaseo-" + UUID.randomUUID();
var body = BodyPublishers.concat(
BodyPublishers.ofString("--" + boundary + "\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nopenai/gpt-4o-transcribe\r\n"),
BodyPublishers.ofString("--" + boundary + "\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n"),
BodyPublishers.ofString("--" + boundary + "\r\nContent-Disposition: form-data; name=\"file\"; filename=\"call.mp3\"\r\nContent-Type: audio/mpeg\r\n\r\n"),
BodyPublishers.ofFile(Path.of("call.mp3")),
BodyPublishers.ofString("\r\n--" + boundary + "--\r\n")
);
var request = HttpRequest.newBuilder(URI.create(baseUrl + "/audio/transcriptions"))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
.timeout(Duration.ofSeconds(60))
.POST(body)
.build();
var response = HttpClient.newHttpClient().send(request, BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300) {
throw new IOException("HTTP " + response.statusCode() + ": " + response.body());
}
System.out.println(response.body());
| اللغة | دالة حزمة SDK | هل يمكنها رفع ملف؟ |
|---|---|---|
| TypeScript | client.generateTranscription(form) | نعم. مرّر جسم FormData وسترسله حزمة SDK بوصفه بيانات متعددة الأجزاء دون تغيير. التحويل (cast) ضروري لأن نوع الدالة يصف جسم JSON. |
| Python | client.generate_transcription(request) | لا. ترسل دائمًا بيانات JSON، لذا أرسل النموذج باستخدام HTTPX، كما في المثال أعلاه. |
| Go | client.CreateTranscription(ctx, req) | لا. ترسل بيانات JSON؛ استخدم net/http وmime/multipart. |
| C# | client.CreateTranscription(request) | لا. ترسل بيانات JSON؛ استخدم HttpClient وMultipartFormDataContent. |
| PHP | $client->generateTranscription($request)، والاسم البديل createTranscription() | لا. ترسل بيانات JSON؛ استخدم خيار multipart في Guzzle. |
| Ruby | client.generate_transcription(...)، والاسم البديل create_transcription | لا. ترسل بيانات JSON؛ استخدم Net::HTTP وset_form. |
| Java | لا توجد | لا. استخدم java.net.http.HttpClient مع جسم متعدد الأجزاء. |
| Rust | لا توجد | لا. ترسل client.post() بيانات JSON فقط، لذا لا تعمل إلا مع مصادر URL. |
تحويل الصوت إلى نص من عنوان URL
يمكن لنماذج Mistral وElevenLabs وMorpheus قراءة الصوت من عنوان URL بدلًا من رفعه. ولأن هذا الطلب بتنسيق JSON، فإن دوال حزم SDK التي لا تستطيع رفع ملف تتعامل معه:result = client.generate_transcription({
"model": "mistral/voxtral-mini-transcribe-2",
"file_url": "https://example.com/call.mp3",
"language": "en",
})
print(result["text"])
resp, err := client.CreateTranscription(context.Background(), map[string]interface{}{
"model": "mistral/voxtral-mini-transcribe-2",
"file_url": "https://example.com/call.mp3",
"language": "en",
})
if err != nil {
panic(err)
}
fmt.Println(resp["text"])
var response = await client.CreateTranscription(new Dictionary<string, object>
{
["model"] = "mistral/voxtral-mini-transcribe-2",
["file_url"] = "https://example.com/call.mp3",
["language"] = "en",
});
$response = $client->generateTranscription([
'model' => 'mistral/voxtral-mini-transcribe-2',
'file_url' => 'https://example.com/call.mp3',
'language' => 'en',
]);
echo $response['text'];
response = client.generate_transcription(
model: 'mistral/voxtral-mini-transcribe-2',
file_url: 'https://example.com/call.mp3',
language: 'en'
)
let response = client.post("/audio/transcriptions", &json!({
"model": "mistral/voxtral-mini-transcribe-2",
"file_url": "https://example.com/call.mp3",
"language": "en"
}))?;
println!("{}", response.body["text"]);
المعاملات
أسماء الحقول في كل لغة هي حقول النموذج (أو حقول JSON لمصدر URL).| الحقل | ملاحظات |
|---|---|
model | مطلوب. معرّف نموذج تحويل الكلام إلى نص. |
file | الملف الصوتي المرفوع: aac أو flac أو mp3 أو mp4 أو mpeg أو mpga أو m4a أو ogg أو opus أو wav أو webm. مطلوب إلا عند استخدام خيارات URL أدناه. ما يصل إلى 25 MB لمعظم النماذج. |
file_url، file_id، s3_presigned_url | تقبل نماذج Mistral وElevenLabs وMorpheus مصدرًا صوتيًا واحدًا بالضبط، لذا يمكنها استخدام عنوان URL بدلًا من file. |
language | تلميح اللغة، مثل en. |
prompt | سياق لتحسين الدقة. |
temperature | من 0 إلى 1 (من 0 إلى 2 لدى ElevenLabs). |
response_format | json أو text أو srt أو verbose_json أو vtt أو diarized_json. |
timestamp_granularities | word و/أو segment. |
stream | بثّ النص أثناء إنتاجه، حيث يدعم النموذج ذلك. |
الاستجابة
AudioTranscriptionResponse، وتُعاد بنوع الخريطة الخاص بكل حزمة SDK (map[string]interface{} في Go، وDictionary<string, object>? في C#، ومصفوفة في PHP، وHash في Ruby):
{
"text": "Hello world"
}