Анализ потокового ответа от OpenAI с использованием Retrofit и Gson/MoshiAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Анализ потокового ответа от OpenAI с использованием Retrofit и Gson/Moshi

Сообщение Anonymous »

Я пытаюсь проанализировать ответ от API транскрипции OpenAI с включенной потоковой передачей.
Запрос:

Код: Выделить всё

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
И ответ:
Дельта:

Код: Выделить всё

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

Готово:

Код: Выделить всё

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]},.....}
Json начинается после «data:», и сейчас я выполняю сопоставление строк

Код: Выделить всё

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)
}
}
}
И я хочу знать, есть ли лучшие и эффективные способы анализа, кроме сопоставления строк.

Подробнее здесь: https://stackoverflow.com/questions/798 ... gson-moshi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»