Mercurial Hosting > lang
comparison 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 |
comparison
equal
deleted
inserted
replaced
13:65bd7e245c63 | 14:47b00cce8b53 |
---|---|
1 local Luan = require "luan:Luan.luan" | |
2 local error = Luan.error | |
3 local Parsers = require "luan:Parsers.luan" | |
4 local json_string = Parsers.json_string or error() | |
5 local json_parse = Parsers.json_parse or error() | |
6 local Io = require "luan:Io.luan" | |
7 local uri = Io.uri or error() | |
8 local Http = require "luan:http/Http.luan" | |
9 local Config = require "site:/private/Config.luan" | |
10 local key = Config.chatgpt.key or error() | |
11 local Logging = require "luan:logging/Logging.luan" | |
12 local logger = Logging.logger "sst.js" | |
13 | |
14 | |
15 local url = "https://api.openai.com/v1/audio/transcriptions" | |
16 local headers = { | |
17 Authorization = "Bearer "..key | |
18 ["Content-Type"] = "multipart/form-data" | |
19 } | |
20 | |
21 local function speech_to_text(audio) | |
22 local options = { | |
23 method = "POST" | |
24 headers = headers | |
25 enctype = "multipart/form-data" | |
26 parameters = { | |
27 model = "whisper-1" | |
28 file = audio | |
29 } | |
30 } | |
31 local json = uri(url,options).read_text() | |
32 -- logger.info(json) | |
33 local result = json_parse(json) | |
34 return result.text or error() | |
35 end | |
36 | |
37 return function() | |
38 local audio = Http.request.parameters.audio or error() | |
39 local text = speech_to_text(audio) | |
40 Io.stdout = Http.response.text_writer() | |
41 %> | |
42 setText(<%=json_string(text)%>); | |
43 <% | |
44 end |