From 1a3f012b8641ee75b263d382f0863dbad69a0a07 Mon Sep 17 00:00:00 2001 From: Wangchong Zhou Date: Fri, 17 Jan 2025 17:57:54 +0800 Subject: [PATCH] fix(llm): fix error when upstream_url missing trailing slash AG-203 --- .../unreleased/kong/fix-ai-upstream-url-trailing-empty.yml | 4 ++++ kong/llm/drivers/anthropic.lua | 2 +- kong/llm/drivers/azure.lua | 2 +- kong/llm/drivers/bedrock.lua | 2 +- kong/llm/drivers/cohere.lua | 2 +- kong/llm/drivers/gemini.lua | 2 +- kong/llm/drivers/openai.lua | 2 +- 7 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 changelog/unreleased/kong/fix-ai-upstream-url-trailing-empty.yml diff --git a/changelog/unreleased/kong/fix-ai-upstream-url-trailing-empty.yml b/changelog/unreleased/kong/fix-ai-upstream-url-trailing-empty.yml new file mode 100644 index 00000000000..57a96637b73 --- /dev/null +++ b/changelog/unreleased/kong/fix-ai-upstream-url-trailing-empty.yml @@ -0,0 +1,4 @@ +message: | + **AI Plugins**: fix AI upstream URL trailing being empty +type: bugfix +scope: Plugin diff --git a/kong/llm/drivers/anthropic.lua b/kong/llm/drivers/anthropic.lua index e09da82817e..55cda78b142 100644 --- a/kong/llm/drivers/anthropic.lua +++ b/kong/llm/drivers/anthropic.lua @@ -530,7 +530,7 @@ function _M.configure_request(conf) ai_shared.override_upstream_url(parsed_url, conf) -- if the path is read from a URL capture, ensure that it is valid - parsed_url.path = string_gsub(parsed_url.path, "^/*", "/") + parsed_url.path = (parsed_url.path and string_gsub(parsed_url.path, "^/*", "/")) or "/" kong.service.request.set_path(parsed_url.path) kong.service.request.set_scheme(parsed_url.scheme) diff --git a/kong/llm/drivers/azure.lua b/kong/llm/drivers/azure.lua index 67f02e6001c..b9c0d320be8 100644 --- a/kong/llm/drivers/azure.lua +++ b/kong/llm/drivers/azure.lua @@ -121,7 +121,7 @@ function _M.configure_request(conf) ai_shared.override_upstream_url(parsed_url, conf) -- if the path is read from a URL capture, 3re that it is valid - parsed_url.path = string_gsub(parsed_url.path, "^/*", "/") + parsed_url.path = (parsed_url.path and string_gsub(parsed_url.path, "^/*", "/")) or "/" kong.service.request.set_path(parsed_url.path) kong.service.request.set_scheme(parsed_url.scheme) diff --git a/kong/llm/drivers/bedrock.lua b/kong/llm/drivers/bedrock.lua index 4ffd1c94b6a..77a532c67fb 100644 --- a/kong/llm/drivers/bedrock.lua +++ b/kong/llm/drivers/bedrock.lua @@ -568,7 +568,7 @@ function _M.configure_request(conf, aws_sdk) end -- if the path is read from a URL capture, ensure that it is valid - parsed_url.path = string_gsub(parsed_url.path, "^/*", "/") + parsed_url.path = (parsed_url.path and string_gsub(parsed_url.path, "^/*", "/")) or "/" ai_shared.override_upstream_url(parsed_url, conf) diff --git a/kong/llm/drivers/cohere.lua b/kong/llm/drivers/cohere.lua index 38acdefc68a..ae55edbf704 100644 --- a/kong/llm/drivers/cohere.lua +++ b/kong/llm/drivers/cohere.lua @@ -509,7 +509,7 @@ function _M.configure_request(conf) -- if the path is read from a URL capture, ensure that it is valid - parsed_url.path = string_gsub(parsed_url.path, "^/*", "/") + parsed_url.path = (parsed_url.path and string_gsub(parsed_url.path, "^/*", "/")) or "/" kong.service.request.set_path(parsed_url.path) kong.service.request.set_scheme(parsed_url.scheme) diff --git a/kong/llm/drivers/gemini.lua b/kong/llm/drivers/gemini.lua index 99ba1b4adba..2069e5c528c 100644 --- a/kong/llm/drivers/gemini.lua +++ b/kong/llm/drivers/gemini.lua @@ -519,7 +519,7 @@ function _M.configure_request(conf, identity_interface) -- if the path is read from a URL capture, ensure that it is valid - parsed_url.path = string_gsub(parsed_url.path, "^/*", "/") + parsed_url.path = (parsed_url.path and string_gsub(parsed_url.path, "^/*", "/")) or "/" kong.service.request.set_path(parsed_url.path) kong.service.request.set_scheme(parsed_url.scheme) diff --git a/kong/llm/drivers/openai.lua b/kong/llm/drivers/openai.lua index 549b51ea04a..260f2a40791 100644 --- a/kong/llm/drivers/openai.lua +++ b/kong/llm/drivers/openai.lua @@ -205,7 +205,7 @@ function _M.configure_request(conf) ai_shared.override_upstream_url(parsed_url, conf) -- if the path is read from a URL capture, ensure that it is valid - parsed_url.path = string_gsub(parsed_url.path, "^/*", "/") + parsed_url.path = (parsed_url.path and string_gsub(parsed_url.path, "^/*", "/")) or "/" kong.service.request.set_path(parsed_url.path) kong.service.request.set_scheme(parsed_url.scheme)