From a46fbb93ab71b30af88ae1e2eb6acf4f0ff8459d Mon Sep 17 00:00:00 2001 From: zign Date: Thu, 4 Sep 2025 15:39:51 +0000 Subject: [PATCH 1/2] bugfix --- Gemfile | 2 + lib/dify/client.rb | 180 +++++++++++++++++++------------------ lib/dify/client/version.rb | 2 +- 3 files changed, 95 insertions(+), 89 deletions(-) diff --git a/Gemfile b/Gemfile index 3ba6778..d4eb7ac 100644 --- a/Gemfile +++ b/Gemfile @@ -12,3 +12,5 @@ gem "minitest", "~> 5.0" gem "rubocop", "~> 1.72" gem "webmock" + +gem "net/https" \ No newline at end of file diff --git a/lib/dify/client.rb b/lib/dify/client.rb index 42b80cd..cd5b5a6 100644 --- a/lib/dify/client.rb +++ b/lib/dify/client.rb @@ -2,95 +2,99 @@ require_relative "client/version" -class DifyClient - def initialize(api_key, base_url = "https://api.dify.ai/v1") - @api_key = api_key - @base_url = base_url - end - - def message_feedback(message_id, rating, user) - data = { - rating: rating, - user: user - } - _send_request("POST", "/messages/#{message_id}/feedbacks", data) - end - - def get_application_parameters(user) - params = { user: user } - _send_request("GET", "/parameters", nil, params) - end - - def update_api_key(new_key) - @api_key = new_key - end - - private - - def _send_request(method, endpoint, data = nil, params = nil, _stream: false) - uri = URI.parse("#{@base_url}#{endpoint}") - - http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl = true - - headers = { - "Authorization" => "Bearer #{@api_key}", - "Content-Type" => "application/json" - } - - if method == "GET" - uri.query = URI.encode_www_form(params) if params - request = Net::HTTP::Get.new(uri.request_uri, headers) - elsif method == "POST" - request = Net::HTTP::Post.new(uri.request_uri, headers) - request.body = data.to_json +module Dify + module Client + class DifyClient + def initialize(api_key, base_url = "https://api.dify.ai/v1") + @api_key = api_key + @base_url = base_url + end + + def message_feedback(message_id, rating, user) + data = { + rating: rating, + user: user + } + _send_request("POST", "/messages/#{message_id}/feedbacks", data) + end + + def get_application_parameters(user) + params = { user: user } + _send_request("GET", "/parameters", nil, params) + end + + def update_api_key(new_key) + @api_key = new_key + end + + private + + def _send_request(method, endpoint, data = nil, params = nil, _stream = false) + uri = URI.parse("#{@base_url}#{endpoint}") + + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + + headers = { + "Authorization" => "Bearer #{@api_key}", + "Content-Type" => "application/json" + } + + if method == "GET" + uri.query = URI.encode_www_form(params) if params + request = Net::HTTP::Get.new(uri.request_uri, headers) + elsif method == "POST" + request = Net::HTTP::Post.new(uri.request_uri, headers) + request.body = data.to_json + end + + http.request(request) + end end - http.request(request) - end -end - -class CompletionClient < DifyClient - def create_completion_message(inputs, query, response_mode, user) - data = { - inputs: inputs, - query: query, - response_mode: response_mode, - user: user - } - _send_request("POST", "/completion-messages", data, nil, response_mode == "streaming") - end -end - -class ChatClient < DifyClient - def create_chat_message(inputs, query, user, response_mode = "blocking", conversation_id = nil) - data = { - inputs: inputs, - query: query, - user: user, - response_mode: response_mode - } - data[:conversation_id] = conversation_id if conversation_id - - _send_request("POST", "/chat-messages", data, nil, response_mode == "streaming") - end - - def get_conversation_messages(user, conversation_id = nil, first_id = nil, limit = nil) - params = { user: user } - params[:conversation_id] = conversation_id if conversation_id - params[:first_id] = first_id if first_id - params[:limit] = limit if limit - - _send_request("GET", "/messages", nil, params) - end - - def get_conversations(user, last_id = nil, limit = nil, pinned = nil) - params = { user: user, last_id: last_id, limit: limit, pinned: pinned } - _send_request("GET", "/conversations", nil, params) - end + class CompletionClient < DifyClient + def create_completion_message(inputs, query, response_mode, user) + data = { + inputs: inputs, + query: query, + response_mode: response_mode, + user: user + } + _send_request("POST", "/completion-messages", data, nil, response_mode == "streaming") + end + end - def rename_conversation(conversation_id, name, user) - data = { name: name, user: user } - _send_request("POST", "/conversations/#{conversation_id}/name", data) + class ChatClient < DifyClient + def create_chat_message(inputs, query, user, response_mode = "blocking", conversation_id = nil) + data = { + inputs: inputs, + query: query, + user: user, + response_mode: response_mode + } + data[:conversation_id] = conversation_id if conversation_id + + _send_request("POST", "/chat-messages", data, nil, response_mode == "streaming") + end + + def get_conversation_messages(user, conversation_id = nil, first_id = nil, limit = nil) + params = { user: user } + params[:conversation_id] = conversation_id if conversation_id + params[:first_id] = first_id if first_id + params[:limit] = limit if limit + + _send_request("GET", "/messages", nil, params) + end + + def get_conversations(user, last_id = nil, limit = nil, pinned = nil) + params = { user: user, last_id: last_id, limit: limit, pinned: pinned } + _send_request("GET", "/conversations", nil, params) + end + + def rename_conversation(conversation_id, name, user) + data = { name: name, user: user } + _send_request("POST", "/conversations/#{conversation_id}/name", data) + end + end end -end +end \ No newline at end of file diff --git a/lib/dify/client/version.rb b/lib/dify/client/version.rb index fdf3f7b..c0003ba 100644 --- a/lib/dify/client/version.rb +++ b/lib/dify/client/version.rb @@ -2,6 +2,6 @@ module Dify module Client - VERSION = "0.1.0" + VERSION = "0.1.1" end end From 280d113007e77135f5695de5b1797d11b207a27e Mon Sep 17 00:00:00 2001 From: zign Date: Thu, 4 Sep 2025 15:55:20 +0000 Subject: [PATCH 2/2] mini fix --- Gemfile | 2 -- Gemfile.lock | 2 +- lib/dify/client.rb | 2 ++ 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index d4eb7ac..3ba6778 100644 --- a/Gemfile +++ b/Gemfile @@ -12,5 +12,3 @@ gem "minitest", "~> 5.0" gem "rubocop", "~> 1.72" gem "webmock" - -gem "net/https" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index cf321be..cfb96a8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - dify_client (0.1.0) + dify_client (0.1.1) GEM remote: https://rubygems.org/ diff --git a/lib/dify/client.rb b/lib/dify/client.rb index cd5b5a6..3029dca 100644 --- a/lib/dify/client.rb +++ b/lib/dify/client.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true require_relative "client/version" +require "net/https" +require "json" module Dify module Client