| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 | 
							- <?php
 - 
 - require 'vendor/autoload.php';
 - 
 - use GuzzleHttp\Client;
 - 
 - class DifyClient {
 -     protected $api_key;
 -     protected $base_url;
 -     protected $client;
 - 
 -     public function __construct($api_key, $base_url = null) {
 -         $this->api_key = $api_key;
 -         $this->base_url = $base_url ?? "https://api.dify.ai/v1/";
 -         $this->client = new Client([
 -             'base_uri' => $this->base_url,
 -             'headers' => [
 -                 'Authorization' => 'Bearer ' . $this->api_key,
 -                 'Content-Type' => 'application/json',
 -             ],
 -         ]);
 -         $this->file_client = new Client([
 -             'base_uri' => $this->base_url,
 -             'headers' => [
 -                 'Authorization' => 'Bearer ' . $this->api_key,
 -                 'Content-Type' => 'multipart/form-data',
 -             ],
 -         ]);
 -     }
 - 
 -     protected function send_request($method, $endpoint, $data = null, $params = null, $stream = false) {
 -         $options = [
 -             'json' => $data,
 -             'query' => $params,
 -             'stream' => $stream,
 -         ];
 - 
 -         $response = $this->client->request($method, $endpoint, $options);
 -         return $response;
 -     }
 - 
 -     public function message_feedback($message_id, $rating, $user) {
 -         $data = [
 -             'rating' => $rating,
 -             'user' => $user,
 -         ];
 -         return $this->send_request('POST', "messages/{$message_id}/feedbacks", $data);
 -     }
 - 
 -     public function get_application_parameters($user) {
 -         $params = ['user' => $user];
 -         return $this->send_request('GET', 'parameters', null, $params);
 -     }
 - 
 -     public function file_upload($user, $files) {
 -         $data = ['user' => $user];
 -         $options = [
 -             'multipart' => $this->prepareMultipart($data, $files)
 -         ];
 - 
 -         return $this->file_client->request('POST', 'files/upload', $options);
 -     }
 - 
 -     protected function prepareMultipart($data, $files) {
 -         $multipart = [];
 -         foreach ($data as $key => $value) {
 -             $multipart[] = [
 -                 'name' => $key,
 -                 'contents' => $value
 -             ];
 -         }
 - 
 -         foreach ($files as $file) {
 -             $multipart[] = [
 -                 'name' => 'file',
 -                 'contents' => fopen($file['tmp_name'], 'r'),
 -                 'filename' => $file['name']
 -             ];
 -         }
 - 
 -         return $multipart;
 -     }
 - 
 - 
 -     public function text_to_audio($text, $user, $streaming = false) {
 -         $data = [
 -             'text' => $text,
 -             'user' => $user,
 -             'streaming' => $streaming
 -         ];
 - 
 -         return $this->send_request('POST', 'text-to-audio', $data);
 -     }
 - 
 -     public function get_meta($user) {
 -         $params = [
 -             'user' => $user
 -         ];
 - 
 -         return $this->send_request('GET', 'meta',null, $params);
 -     }
 - }
 - 
 - class CompletionClient extends DifyClient {
 -     public function create_completion_message($inputs, $response_mode, $user, $files = null) {
 -         $data = [
 -             'inputs' => $inputs,
 -             'response_mode' => $response_mode,
 -             'user' => $user,
 -             'files' => $files,
 -         ];
 -         return $this->send_request('POST', 'completion-messages', $data, null, $response_mode === 'streaming');
 -     }
 - }
 - 
 - class ChatClient extends DifyClient {
 -     public function create_chat_message($inputs, $query, $user, $response_mode = 'blocking', $conversation_id = null, $files = null) {
 -         $data = [
 -             'inputs' => $inputs,
 -             'query' => $query,
 -             'user' => $user,
 -             'response_mode' => $response_mode,
 -             'files' => $files,
 -         ];
 -         if ($conversation_id) {
 -             $data['conversation_id'] = $conversation_id;
 -         }
 - 
 -         return $this->send_request('POST', 'chat-messages', $data, null, $response_mode === 'streaming');
 -     }
 -         
 -     public function get_suggestions($message_id, $user) {
 -         $params = [
 -             'user' => $user
 -         ]
 -         return $this->send_request('GET', "messages/{$message_id}/suggested", null, $params);
 -     }
 -     
 -     public function stop_message($task_id, $user) {
 -         $data = ['user' => $user];
 -         return $this->send_request('POST', "chat-messages/{$task_id}/stop", $data);
 -     }
 - 
 -     public function get_conversations($user, $first_id = null, $limit = null, $pinned = null) {
 -         $params = [
 -             'user' => $user,
 -             'first_id' => $first_id,
 -             'limit' => $limit,
 -             'pinned'=> $pinned,
 -         ];
 -         return $this->send_request('GET', 'conversations', null, $params);
 -     }
 - 
 -     public function get_conversation_messages($user, $conversation_id = null, $first_id = null, $limit = null) {
 -         $params = ['user' => $user];
 - 
 -         if ($conversation_id) {
 -             $params['conversation_id'] = $conversation_id;
 -         }
 -         if ($first_id) {
 -             $params['first_id'] = $first_id;
 -         }
 -         if ($limit) {
 -             $params['limit'] = $limit;
 -         }
 - 
 -         return $this->send_request('GET', 'messages', null, $params);
 -     }
 -     
 -     public function rename_conversation($conversation_id, $name,$auto_generate, $user) {
 -         $data = [
 -             'name' => $name,
 -             'user' => $user,
 -             'auto_generate' => $auto_generate
 -         ];
 -         return $this->send_request('PATCH', "conversations/{$conversation_id}", $data);
 -     }
 - 
 -     public function delete_conversation($conversation_id, $user) {
 -         $data = [
 -             'user' => $user,
 -         ];
 -         return $this->send_request('DELETE', "conversations/{$conversation_id}", $data);
 -     }
 - 
 -     public function audio_to_text($audio_file, $user) {
 -         $data = [
 -             'user' => $user,
 -         ];
 -         $options = [
 -             'multipart' => $this->prepareMultipart($data, $files)
 -         ];
 -         return $this->file_client->request('POST', 'audio-to-text', $options);
 -         
 -     }
 - 
 - }
 - 
 - class WorkflowClient extends DifyClient{
 -     public function run($inputs, $response_mode, $user) {
 -         $data = [
 -             'inputs' => $inputs,
 -             'response_mode' => $response_mode,
 -             'user' => $user,
 -         ];
 -         return $this->send_request('POST', 'workflows/run', $data);
 -     }
 - 
 -     public function stop($task_id, $user) {
 -         $data = [
 -             'user' => $user,
 -         ];
 -         return $this->send_request('POST', "workflows/tasks/{$task_id}/stop",$data);
 -     }
 -     
 - }
 
 
  |