| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | <?phprequire 'vendor/autoload.php';use GuzzleHttp\Client;class DifyClient {    protected $api_key;    protected $base_url;    protected $client;    public function __construct($api_key) {        $this->api_key = $api_key;        $this->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;    }}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_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 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 rename_conversation($conversation_id, $name, $user) {        $data = [            'name' => $name,            'user' => $user,        ];        return $this->send_request('PATCH', "conversations/{$conversation_id}", $data);    }}
 |