client.rb 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. require 'net/http'
  2. require 'json'
  3. require 'uri'
  4. class DifyClient
  5. def initialize(api_key)
  6. @api_key = api_key
  7. @base_url = "https://api.dify.ai/v1"
  8. end
  9. def _send_request(method, endpoint, data = nil, params = nil, stream = false)
  10. uri = URI.parse("#{@base_url}#{endpoint}")
  11. http = Net::HTTP.new(uri.host, uri.port)
  12. http.use_ssl = true
  13. headers = {
  14. "Authorization" => "Bearer #{@api_key}",
  15. "Content-Type" => "application/json"
  16. }
  17. if method == "GET"
  18. uri.query = URI.encode_www_form(params) if params
  19. request = Net::HTTP::Get.new(uri.request_uri, headers)
  20. elsif method == "POST"
  21. request = Net::HTTP::Post.new(uri.request_uri, headers)
  22. request.body = data.to_json
  23. end
  24. response = http.request(request)
  25. return response
  26. end
  27. def message_feedback(message_id, rating, user)
  28. data = {
  29. rating: rating,
  30. user: user
  31. }
  32. return _send_request("POST", "/messages/#{message_id}/feedbacks", data)
  33. end
  34. def get_application_parameters(user)
  35. params = {user: user}
  36. return _send_request("GET", "/parameters", nil, params)
  37. end
  38. end
  39. class CompletionClient < DifyClient
  40. def create_completion_message(inputs, query, response_mode, user)
  41. data = {
  42. inputs: inputs,
  43. query: query,
  44. response_mode: response_mode,
  45. user: user
  46. }
  47. return _send_request("POST", "/completion-messages", data, nil, response_mode == "streaming")
  48. end
  49. end
  50. class ChatClient < DifyClient
  51. def create_chat_message(inputs, query, user, response_mode = "blocking", conversation_id = nil)
  52. data = {
  53. inputs: inputs,
  54. query: query,
  55. user: user,
  56. response_mode: response_mode
  57. }
  58. data[:conversation_id] = conversation_id if conversation_id
  59. return _send_request("POST", "/chat-messages", data, nil, response_mode == "streaming")
  60. end
  61. def get_conversation_messages(user, conversation_id = nil, first_id = nil, limit = nil)
  62. params = {user: user}
  63. params[:conversation_id] = conversation_id if conversation_id
  64. params[:first_id] = first_id if first_id
  65. params[:limit] = limit if limit
  66. return _send_request("GET", "/messages", nil, params)
  67. end
  68. def get_conversations(user, last_id = nil, limit = nil, pinned = nil)
  69. params = {user: user, last_id: last_id, limit: limit, pinned: pinned}
  70. return _send_request("GET", "/conversations", nil, params)
  71. end
  72. def rename_conversation(conversation_id, name, user)
  73. data = {name: name, user: user}
  74. return _send_request("POST", "/conversations/#{conversation_id}/name", data)
  75. end
  76. end