require("app.app") local httpclient = require("httpclient") local M = {} M.eval_url = "https://edu.hivoice.cn/eval/" local function resolve_eval_format(format) format = string.lower(tostring(format or "pcm")) if format == "wav" or format == "pcm" then return format, "pcm" end return format, format end local function build_multipart_body(parts, boundary) local payload = "" for _, part in ipairs(parts) do payload = payload .. "--" .. boundary .. "\r\n" if part.filename then payload = payload .. 'Content-Disposition: form-data; name="' .. part.name .. '"; filename="' .. part.filename .. '"\r\n' payload = payload .. "Content-Type: " .. (part.content_type or "application/octet-stream") .. "\r\n\r\n" else payload = payload .. 'Content-Disposition: form-data; name="' .. part.name .. '"\r\n\r\n' end payload = payload .. (part.data or "") .. "\r\n" end payload = payload .. "--" .. boundary .. "--\r\n" return payload end M.eval = function(text, mode, format, voice, config) local file_format, url_format = resolve_eval_format(format) local boundary = "----WebKitFormBoundary" .. tostring(os.time()) local payload = build_multipart_body({ { name = "text", data = tostring(text) }, { name = "mode", data = tostring(mode) }, { name = "voice", data = voice, filename = "voice." .. file_format, content_type = "application/octet-stream", }, }, boundary) local result, err = httpclient.post(M.eval_url .. url_format, { ["Content-Type"] = "multipart/form-data; boundary=" .. boundary, ["session-id"] = fw.make_software_guid(), ["appkey"] = config.appkey .. "@" .. config.appsecret, ["Wrap-Create-Time"] = "true", }, payload) if result then return true, cjson.decode(err) end print(err) return false, err end return M