dify-client.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. require 'vendor/autoload.php';
  3. use GuzzleHttp\Client;
  4. class DifyClient {
  5. protected $api_key;
  6. protected $base_url;
  7. protected $client;
  8. public function __construct($api_key) {
  9. $this->api_key = $api_key;
  10. $this->base_url = "https://api.dify.ai/v1/";
  11. $this->client = new Client([
  12. 'base_uri' => $this->base_url,
  13. 'headers' => [
  14. 'Authorization' => 'Bearer ' . $this->api_key,
  15. 'Content-Type' => 'application/json',
  16. ],
  17. ]);
  18. }
  19. protected function send_request($method, $endpoint, $data = null, $params = null, $stream = false) {
  20. $options = [
  21. 'json' => $data,
  22. 'query' => $params,
  23. 'stream' => $stream,
  24. ];
  25. $response = $this->client->request($method, $endpoint, $options);
  26. return $response;
  27. }
  28. public function message_feedback($message_id, $rating, $user) {
  29. $data = [
  30. 'rating' => $rating,
  31. 'user' => $user,
  32. ];
  33. return $this->send_request('POST', "messages/{$message_id}/feedbacks", $data);
  34. }
  35. public function get_application_parameters($user) {
  36. $params = ['user' => $user];
  37. return $this->send_request('GET', 'parameters', null, $params);
  38. }
  39. }
  40. class CompletionClient extends DifyClient {
  41. public function create_completion_message($inputs, $query, $response_mode, $user) {
  42. $data = [
  43. 'inputs' => $inputs,
  44. 'query' => $query,
  45. 'response_mode' => $response_mode,
  46. 'user' => $user,
  47. ];
  48. return $this->send_request('POST', 'completion-messages', $data, null, $response_mode === 'streaming');
  49. }
  50. }
  51. class ChatClient extends DifyClient {
  52. public function create_chat_message($inputs, $query, $user, $response_mode = 'blocking', $conversation_id = null) {
  53. $data = [
  54. 'inputs' => $inputs,
  55. 'query' => $query,
  56. 'user' => $user,
  57. 'response_mode' => $response_mode,
  58. ];
  59. if ($conversation_id) {
  60. $data['conversation_id'] = $conversation_id;
  61. }
  62. return $this->send_request('POST', 'chat-messages', $data, null, $response_mode === 'streaming');
  63. }
  64. public function get_conversation_messages($user, $conversation_id = null, $first_id = null, $limit = null) {
  65. $params = ['user' => $user];
  66. if ($conversation_id) {
  67. $params['conversation_id'] = $conversation_id;
  68. }
  69. if ($first_id) {
  70. $params['first_id'] = $first_id;
  71. }
  72. if ($limit) {
  73. $params['limit'] = $limit;
  74. }
  75. return $this->send_request('GET', 'messages', null, $params);
  76. }
  77. public function get_conversations($user, $first_id = null, $limit = null, $pinned = null) {
  78. $params = [
  79. 'user' => $user,
  80. 'first_id' => $first_id,
  81. 'limit' => $limit,
  82. 'pinned'=> $pinned,
  83. ];
  84. return $this->send_request('GET', 'conversations', null, $params);
  85. }
  86. public function rename_conversation($conversation_id, $name, $user) {
  87. $data = [
  88. 'name' => $name,
  89. 'user' => $user,
  90. ];
  91. return $this->send_request('PATCH', "conversations/{$conversation_id}", $data);
  92. }
  93. }