diff --git a/lib/openai/http.rb b/lib/openai/http.rb index d04cca5f..4b9ad60b 100644 --- a/lib/openai/http.rb +++ b/lib/openai/http.rb @@ -86,8 +86,7 @@ def conn(multipart: false) def uri(path:) if azure? - base = File.join(@uri_base, path) - "#{base}?api-version=#{@api_version}" + azure_uri(path) elsif @uri_base.include?(@api_version) File.join(@uri_base, path) else @@ -95,6 +94,18 @@ def uri(path:) end end + def azure_uri(path) + base = File.join(@uri_base, path) + + # Remove the deployment to support assistants for azure + if path.include?("/assistants") || path.include?("/threads") + base = base.gsub(%r{/deployments/[^/]+/}, + "/") + end + + "#{base}?api-version=#{@api_version}" + end + def multipart_parameters(parameters) parameters&.transform_values do |value| next value unless value.respond_to?(:close) # File or IO object. diff --git a/spec/openai/client/http_spec.rb b/spec/openai/client/http_spec.rb index 24d9fa7c..3e50c071 100644 --- a/spec/openai/client/http_spec.rb +++ b/spec/openai/client/http_spec.rb @@ -251,6 +251,12 @@ let(:uri_base) { "https://custom-domain.openai.azure.com/openai/deployments/gpt-35-turbo" } it { expect(uri).to eq("https://custom-domain.openai.azure.com/openai/deployments/gpt-35-turbo/chat?api-version=v1") } end + + context "with assistants" do + let(:path) { "/assistants/test_assistant_id" } + let(:uri_base) { "https://custom-domain.openai.azure.com/openai/deployments/gpt-35-turbo" } + it { expect(uri).to eq("https://custom-domain.openai.azure.com/openai/assistants/test_assistant_id?api-version=v1") } + end end end