From 3022d34613bd8214630f1d650c1c9de9f491e43f Mon Sep 17 00:00:00 2001
From: Rafael dos Santos Silva <xfalcox@gmail.com>
Date: Thu, 24 Oct 2024 15:47:12 -0300
Subject: [PATCH] FEATURE: Support srv records for OpenAI compatible LLMs
 (#865)

---
 lib/completions/endpoints/open_ai.rb | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/lib/completions/endpoints/open_ai.rb b/lib/completions/endpoints/open_ai.rb
index a8cff595..0677af94 100644
--- a/lib/completions/endpoints/open_ai.rb
+++ b/lib/completions/endpoints/open_ai.rb
@@ -48,7 +48,14 @@ module DiscourseAi
         private
 
         def model_uri
-          URI(llm_model.url)
+          if llm_model.url.to_s.starts_with?("srv://")
+            service = DiscourseAi::Utils::DnsSrv.lookup(llm_model.url.sub("srv://", ""))
+            api_endpoint = "https://#{service.target}:#{service.port}/v1/chat/completions"
+          else
+            api_endpoint = llm_model.url
+          end
+
+          @uri ||= URI(api_endpoint)
         end
 
         def prepare_payload(prompt, model_params, dialect)