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