Analysieren der Streaming-Antwort von OpenAI mit Retrofit und Gson/MoshiAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Analysieren der Streaming-Antwort von OpenAI mit Retrofit und Gson/Moshi

Post by Anonymous »

Ich versuche, die Antwort der OpenAI-Transkriptions-API mit aktiviertem Streaming zu analysieren.
Die Anfrage lautet:

Code: Select all

curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F model="gpt-4o-mini-transcribe" \
-F stream=true
Und die Antwort ist:
Delta:

Code: Select all

data: {"type":"transcript.text.delta","delta":"I","logprobs":[{"token":"I","logprob":-0.00007588794,"bytes":[73]}]}

Fertig:

Code: Select all

data: {"type":"transcript.text.done","text":"I see skies of blue and clouds of white, the bright blessed days, the dark sacred nights, and I think to myself, what a wonderful world.","logprobs":[{"token":"I","logprob":-0.00007588794,"bytes":[73]},.....}
Der JSON beginnt nach „data:“ und ich führe gerade einen String-Abgleich durch

Code: Select all

private fun getAnswer(retrofitAPI: ApiService, modal: ChatGPTRequest, gson: Gson) = flow {

val response = retrofitAPI.getStreams(modal).execute()

if (response.isSuccessful) {
if (response.isSuccessful) {
val input = response.body()?.byteStream()?.bufferedReader() ?: throw Exception()
try {
while (currentCoroutineContext().isActive) {
val line = input.readLine()
if (line != null && line.startsWith("data:")) {
try {
val answerDetailInfo = gson.fromJson(
line.substring(5).trim(),
ChatGPTResponse::class.java
)
emit(answerDetailInfo)
} catch (e: Exception) {
e.printStackTrace()
}
}
delay(100)
}
} catch (e: IOException) {
throw Exception(e)
} finally {
input.close()
}
} else {
throw HttpException(response)
}
}
}
Und ich möchte wissen, ob es bessere und effizientere Möglichkeiten zum Parsen gibt als den String-Abgleich.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post