view src/stt.js.luan @ 27:176a182c02cf

add view_course
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 01 Aug 2025 20:08:13 -0600
parents d3f5448743bf
children f5e72f2d1025
line wrap: on
line source

local Luan = require "luan:Luan.luan"
local error = Luan.error
local Parsers = require "luan:Parsers.luan"
local json_string = Parsers.json_string or error()
local json_parse = Parsers.json_parse or error()
local Io = require "luan:Io.luan"
local uri = Io.uri or error()
local Http = require "luan:http/Http.luan"
local Config = require "site:/private/Config.luan"
local key = Config.chatgpt.key or error()
local Logging = require "luan:logging/Logging.luan"
local logger = Logging.logger "sst.js"


-- https://platform.openai.com/docs/guides/speech-to-text

local url = "https://api.openai.com/v1/audio/transcriptions"
local headers = {
	Authorization = "Bearer "..key
	["Content-Type"] = "multipart/form-data"
}

local function speech_to_text(audio)
	local options = {
		method = "POST"
		headers = headers
		enctype = "multipart/form-data"
		parameters = {
			model = "whisper-1"
			file = audio
		}
	}
	local json = uri(url,options).read_text()
	-- logger.info(json)
	local result = json_parse(json)
	return result.text or error()
end

return function()
	local audio = Http.request.parameters.audio or error()
	local text = speech_to_text(audio)
	Io.stdout = Http.response.text_writer()
%>
	setText(<%=json_string(text)%>);
<%
end