Spaces:
Paused
Paused
| import axios from "axios"; | |
| export const BASE_URL = "https://api.dify.ai/v1"; | |
| export const routes = { | |
| // app's | |
| feedback: { | |
| method: "POST", | |
| url: (message_id) => `/messages/${message_id}/feedbacks`, | |
| }, | |
| application: { | |
| method: "GET", | |
| url: () => `/parameters`, | |
| }, | |
| fileUpload: { | |
| method: "POST", | |
| url: () => `/files/upload`, | |
| }, | |
| textToAudio: { | |
| method: "POST", | |
| url: () => `/text-to-audio`, | |
| }, | |
| getMeta: { | |
| method: "GET", | |
| url: () => `/meta`, | |
| }, | |
| // completion's | |
| createCompletionMessage: { | |
| method: "POST", | |
| url: () => `/completion-messages`, | |
| }, | |
| // chat's | |
| createChatMessage: { | |
| method: "POST", | |
| url: () => `/chat-messages`, | |
| }, | |
| getSuggested:{ | |
| method: "GET", | |
| url: (message_id) => `/messages/${message_id}/suggested`, | |
| }, | |
| stopChatMessage: { | |
| method: "POST", | |
| url: (task_id) => `/chat-messages/${task_id}/stop`, | |
| }, | |
| getConversations: { | |
| method: "GET", | |
| url: () => `/conversations`, | |
| }, | |
| getConversationMessages: { | |
| method: "GET", | |
| url: () => `/messages`, | |
| }, | |
| renameConversation: { | |
| method: "POST", | |
| url: (conversation_id) => `/conversations/${conversation_id}/name`, | |
| }, | |
| deleteConversation: { | |
| method: "DELETE", | |
| url: (conversation_id) => `/conversations/${conversation_id}`, | |
| }, | |
| audioToText: { | |
| method: "POST", | |
| url: () => `/audio-to-text`, | |
| }, | |
| // workflow‘s | |
| runWorkflow: { | |
| method: "POST", | |
| url: () => `/workflows/run`, | |
| }, | |
| stopWorkflow: { | |
| method: "POST", | |
| url: (task_id) => `/workflows/${task_id}/stop`, | |
| } | |
| }; | |
| export class DifyClient { | |
| constructor(apiKey, baseUrl = BASE_URL) { | |
| this.apiKey = apiKey; | |
| this.baseUrl = baseUrl; | |
| } | |
| updateApiKey(apiKey) { | |
| this.apiKey = apiKey; | |
| } | |
| async sendRequest( | |
| method, | |
| endpoint, | |
| data = null, | |
| params = null, | |
| stream = false, | |
| headerParams = {} | |
| ) { | |
| const headers = { | |
| ...{ | |
| Authorization: `Bearer ${this.apiKey}`, | |
| "Content-Type": "application/json", | |
| }, | |
| ...headerParams | |
| }; | |
| const url = `${this.baseUrl}${endpoint}`; | |
| let response; | |
| if (stream) { | |
| response = await axios({ | |
| method, | |
| url, | |
| data, | |
| params, | |
| headers, | |
| responseType: "stream", | |
| }); | |
| } else { | |
| response = await axios({ | |
| method, | |
| url, | |
| ...(method !== "GET" && { data }), | |
| params, | |
| headers, | |
| responseType: "json", | |
| }); | |
| } | |
| return response; | |
| } | |
| messageFeedback(message_id, rating, user) { | |
| const data = { | |
| rating, | |
| user, | |
| }; | |
| return this.sendRequest( | |
| routes.feedback.method, | |
| routes.feedback.url(message_id), | |
| data | |
| ); | |
| } | |
| getApplicationParameters(user) { | |
| const params = { user }; | |
| return this.sendRequest( | |
| routes.application.method, | |
| routes.application.url(), | |
| null, | |
| params | |
| ); | |
| } | |
| fileUpload(data) { | |
| return this.sendRequest( | |
| routes.fileUpload.method, | |
| routes.fileUpload.url(), | |
| data, | |
| null, | |
| false, | |
| { | |
| "Content-Type": 'multipart/form-data' | |
| } | |
| ); | |
| } | |
| textToAudio(text, user, streaming = false) { | |
| const data = { | |
| text, | |
| user, | |
| streaming | |
| }; | |
| return this.sendRequest( | |
| routes.textToAudio.method, | |
| routes.textToAudio.url(), | |
| data, | |
| null, | |
| streaming | |
| ); | |
| } | |
| getMeta(user) { | |
| const params = { user }; | |
| return this.sendRequest( | |
| routes.meta.method, | |
| routes.meta.url(), | |
| null, | |
| params | |
| ); | |
| } | |
| } | |
| export class CompletionClient extends DifyClient { | |
| createCompletionMessage(inputs, user, stream = false, files = null) { | |
| const data = { | |
| inputs, | |
| user, | |
| response_mode: stream ? "streaming" : "blocking", | |
| files, | |
| }; | |
| return this.sendRequest( | |
| routes.createCompletionMessage.method, | |
| routes.createCompletionMessage.url(), | |
| data, | |
| null, | |
| stream | |
| ); | |
| } | |
| runWorkflow(inputs, user, stream = false, files = null) { | |
| const data = { | |
| inputs, | |
| user, | |
| response_mode: stream ? "streaming" : "blocking", | |
| }; | |
| return this.sendRequest( | |
| routes.runWorkflow.method, | |
| routes.runWorkflow.url(), | |
| data, | |
| null, | |
| stream | |
| ); | |
| } | |
| } | |
| export class ChatClient extends DifyClient { | |
| createChatMessage( | |
| inputs, | |
| query, | |
| user, | |
| stream = false, | |
| conversation_id = null, | |
| files = null | |
| ) { | |
| const data = { | |
| inputs, | |
| query, | |
| user, | |
| response_mode: stream ? "streaming" : "blocking", | |
| files, | |
| }; | |
| if (conversation_id) data.conversation_id = conversation_id; | |
| return this.sendRequest( | |
| routes.createChatMessage.method, | |
| routes.createChatMessage.url(), | |
| data, | |
| null, | |
| stream | |
| ); | |
| } | |
| getSuggested(message_id, user) { | |
| const data = { user }; | |
| return this.sendRequest( | |
| routes.getSuggested.method, | |
| routes.getSuggested.url(message_id), | |
| data | |
| ); | |
| } | |
| stopMessage(task_id, user) { | |
| const data = { user }; | |
| return this.sendRequest( | |
| routes.stopChatMessage.method, | |
| routes.stopChatMessage.url(task_id), | |
| data | |
| ); | |
| } | |
| getConversations(user, first_id = null, limit = null, pinned = null) { | |
| const params = { user, first_id: first_id, limit, pinned }; | |
| return this.sendRequest( | |
| routes.getConversations.method, | |
| routes.getConversations.url(), | |
| null, | |
| params | |
| ); | |
| } | |
| getConversationMessages( | |
| user, | |
| conversation_id = "", | |
| first_id = null, | |
| limit = null | |
| ) { | |
| const params = { user }; | |
| if (conversation_id) params.conversation_id = conversation_id; | |
| if (first_id) params.first_id = first_id; | |
| if (limit) params.limit = limit; | |
| return this.sendRequest( | |
| routes.getConversationMessages.method, | |
| routes.getConversationMessages.url(), | |
| null, | |
| params | |
| ); | |
| } | |
| renameConversation(conversation_id, name, user, auto_generate) { | |
| const data = { name, user, auto_generate }; | |
| return this.sendRequest( | |
| routes.renameConversation.method, | |
| routes.renameConversation.url(conversation_id), | |
| data | |
| ); | |
| } | |
| deleteConversation(conversation_id, user) { | |
| const data = { user }; | |
| return this.sendRequest( | |
| routes.deleteConversation.method, | |
| routes.deleteConversation.url(conversation_id), | |
| data | |
| ); | |
| } | |
| audioToText(data) { | |
| return this.sendRequest( | |
| routes.audioToText.method, | |
| routes.audioToText.url(), | |
| data, | |
| null, | |
| false, | |
| { | |
| "Content-Type": 'multipart/form-data' | |
| } | |
| ); | |
| } | |
| } | |
| export class WorkflowClient extends DifyClient { | |
| run(inputs,user,stream) { | |
| const data = { | |
| inputs, | |
| response_mode: stream ? "streaming" : "blocking", | |
| user | |
| }; | |
| return this.sendRequest( | |
| routes.runWorkflow.method, | |
| routes.runWorkflow.url(), | |
| data, | |
| null, | |
| stream | |
| ); | |
| } | |
| stop(task_id, user) { | |
| const data = { user }; | |
| return this.sendRequest( | |
| routes.stopWorkflow.method, | |
| routes.stopWorkflow.url(task_id), | |
| data | |
| ); | |
| } | |
| } |