From d4641e084a64883d449a3a0ea9ebf45ff3410f37 Mon Sep 17 00:00:00 2001 From: zign Date: Tue, 9 Sep 2025 07:46:05 +0000 Subject: [PATCH 1/2] add upload and workflow --- Gemfile | 2 ++ Gemfile.lock | 2 ++ lib/dify/client.rb | 43 ++++++++++++++++++++++++++++++++++++++ lib/dify/client/version.rb | 2 +- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3ba6778..8d08f28 100644 --- a/Gemfile +++ b/Gemfile @@ -12,3 +12,5 @@ gem "minitest", "~> 5.0" gem "rubocop", "~> 1.72" gem "webmock" + +gem "multipart-post" diff --git a/Gemfile.lock b/Gemfile.lock index cfb96a8..363bae3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -18,6 +18,7 @@ GEM language_server-protocol (3.17.0.4) lint_roller (1.1.0) minitest (5.25.4) + multipart-post (2.4.1) parallel (1.26.3) parser (3.3.7.1) ast (~> 2.4.1) @@ -57,6 +58,7 @@ PLATFORMS DEPENDENCIES dify_client! minitest (~> 5.0) + multipart-post rake (~> 13.0) rubocop (~> 1.72) webmock diff --git a/lib/dify/client.rb b/lib/dify/client.rb index 3029dca..e47a6a3 100644 --- a/lib/dify/client.rb +++ b/lib/dify/client.rb @@ -2,7 +2,10 @@ require_relative "client/version" require "net/https" +require 'net/http/post/multipart' + require "json" +require 'uri' module Dify module Client @@ -29,6 +32,28 @@ def update_api_key(new_key) @api_key = new_key end + def upload(io_obj, user, filename="localfile", mine_type="text/plain") + uri = URI.parse("#{@base_url}/files/upload") + + request = Net::HTTP::Post::Multipart.new(uri.path, { + 'file' => UploadIO.new(io_obj, 'text/plain', filename), + 'user' => user + }) + + request['Authorization'] = "Bearer #{@api_key}" + request['User-Agent'] = 'Ruby-Dify-Uploader' + + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + + http.request(request) + end + + def upload_file(file_path, user, filename="localfile", mine_type="text/plain") + fileio = File.new(file_path) + upload(fileio, user, filename, user, mine_type) + end + private def _send_request(method, endpoint, data = nil, params = nil, _stream = false) @@ -66,6 +91,24 @@ def create_completion_message(inputs, query, response_mode, user) end end + class WorkflowClient < DifyClient + def run_workflow(inputs, user, response_mode = "blocking", trace_id = nil) + data = { + inputs: inputs, + user: user, + response_mode: response_mode + } + + data[:trace_id] = trace_id if trace_id + + _send_request("POST", "/workflows/run", data, nil, response_mode == "streaming") + end + + def get_workflow(workflow_id) + _send_request("GET", "/workflows/run/#{workflow_id}", nil, nil) + end + end + class ChatClient < DifyClient def create_chat_message(inputs, query, user, response_mode = "blocking", conversation_id = nil) data = { diff --git a/lib/dify/client/version.rb b/lib/dify/client/version.rb index c0003ba..b93c149 100644 --- a/lib/dify/client/version.rb +++ b/lib/dify/client/version.rb @@ -2,6 +2,6 @@ module Dify module Client - VERSION = "0.1.1" + VERSION = "0.1.2" end end From 52ea63209dacd802d015be72a19ae809eff26c9e Mon Sep 17 00:00:00 2001 From: zign Date: Tue, 9 Sep 2025 07:50:02 +0000 Subject: [PATCH 2/2] bug and mini fix --- Gemfile.lock | 3 ++- dify-client.gemspec | 2 +- lib/dify/client.rb | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 363bae3..e017f37 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,8 @@ PATH remote: . specs: - dify_client (0.1.1) + dify_client (0.1.2) + multipart-post (~> 2.3) GEM remote: https://rubygems.org/ diff --git a/dify-client.gemspec b/dify-client.gemspec index c60657f..6cd28f6 100644 --- a/dify-client.gemspec +++ b/dify-client.gemspec @@ -30,7 +30,7 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] # Uncomment to register a new dependency of your gem - # spec.add_dependency "example-gem", "~> 1.0" + spec.add_dependency "multipart-post", "~> 2.3" # For more information and examples about making a new gem, checkout our # guide at: https://bundler.io/guides/creating_gem.html diff --git a/lib/dify/client.rb b/lib/dify/client.rb index e47a6a3..e66d162 100644 --- a/lib/dify/client.rb +++ b/lib/dify/client.rb @@ -51,7 +51,7 @@ def upload(io_obj, user, filename="localfile", mine_type="text/plain") def upload_file(file_path, user, filename="localfile", mine_type="text/plain") fileio = File.new(file_path) - upload(fileio, user, filename, user, mine_type) + upload(fileio, user, filename, mine_type) end private