Mercurial Hosting > lang
diff src/stt.js.luan @ 14:47b00cce8b53
stt
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 29 Jul 2025 00:12:05 -0600 |
parents | |
children | d3f5448743bf |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/stt.js.luan Tue Jul 29 00:12:05 2025 -0600 @@ -0,0 +1,44 @@ +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" + + +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