mirror of
https://github.com/langgenius/ruby-sdk.git
synced 2026-07-01 20:35:26 -04:00
146 lines
4.3 KiB
Ruby
146 lines
4.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "client/version"
|
|
require "net/https"
|
|
require "net/http/post/multipart"
|
|
|
|
require "json"
|
|
require "uri"
|
|
|
|
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
|
|
|
|
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, mine_type)
|
|
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
|
|
|
|
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, _stream: response_mode == "streaming")
|
|
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, _stream: 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 = {
|
|
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, _stream: 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
|