in apisix/plugins/ai-drivers/openai-base.lua [165:252]
function _M.request(self, ctx, conf, request_table, extra_opts)
local httpc, err = http.new()
if not httpc then
core.log.error("failed to create http client to send request to LLM server: ", err)
return HTTP_INTERNAL_SERVER_ERROR
end
httpc:set_timeout(conf.timeout)
local endpoint = extra_opts.endpoint
local parsed_url
if endpoint then
parsed_url = url.parse(endpoint)
end
local scheme = parsed_url and parsed_url.scheme or "https"
local host = parsed_url and parsed_url.host or self.host
local port = parsed_url and parsed_url.port
if not port then
if scheme == "https" then
port = 443
else
port = 80
end
end
local ok, err = httpc:connect({
scheme = scheme,
host = host,
port = port,
ssl_verify = conf.ssl_verify,
ssl_server_name = parsed_url and parsed_url.host or self.host,
})
if not ok then
core.log.warn("failed to connect to LLM server: ", err)
return handle_error(err)
end
local query_params = extra_opts.query_params
if type(parsed_url) == "table" and parsed_url.query and #parsed_url.query > 0 then
local args_tab = core.string.decode_args(parsed_url.query)
if type(args_tab) == "table" then
core.table.merge(query_params, args_tab)
end
end
local path = (parsed_url and parsed_url.path or self.path)
local headers = extra_opts.headers
headers["Content-Type"] = "application/json"
local params = {
method = "POST",
headers = headers,
ssl_verify = conf.ssl_verify,
path = path,
query = query_params
}
if extra_opts.model_options then
for opt, val in pairs(extra_opts.model_options) do
request_table[opt] = val
end
end
local req_json, err = core.json.encode(request_table)
if not req_json then
return nil, err
end
params.body = req_json
local res, err = httpc:request(params)
if not res then
core.log.warn("failed to send request to LLM server: ", err)
return handle_error(err)
end
local code, body = read_response(ctx, res)
if conf.keepalive then
local ok, err = httpc:set_keepalive(conf.keepalive_timeout, conf.keepalive_pool)
if not ok then
core.log.warn("failed to keepalive connection: ", err)
end
end
return code, body
end