UNPKG

dify-client-plus-node

Version:

This is the Node.js SDK for the Dify.AI API, which allows you to easily integrate Dify.AI into your Node.js applications.

309 lines (308 loc) 8.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.routes = exports.WorkflowClient = exports.DifyClient = exports.ChatClient = exports.BASE_URL = void 0; var _axios = _interopRequireDefault(require("axios")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const BASE_URL = exports.BASE_URL = "https://api.dify.ai/v1"; const routes = exports.routes = { application: { method: "GET", url: () => `/parameters` }, feedback: { method: "POST", url: message_id => `/messages/${message_id}/feedbacks` }, createChatMessage: { method: "POST", url: () => `/chat-messages` }, getConversationMessages: { method: "GET", url: () => `/messages` }, getConversations: { method: "GET", url: () => `/conversations` }, renameConversation: { method: "POST", url: conversation_id => `/conversations/${conversation_id}/name` }, deleteConversation: { method: "DELETE", url: conversation_id => `/conversations/${conversation_id}` }, fileUpload: { method: "POST", url: () => `/files/upload` }, getMeta: { method: "GET", url: () => `/meta` }, getInfo: { method: "GET", url: () => `/info` }, aduioToText: { method: "POST", url: () => `/audio-to-text` }, textToAudio: { method: "POST", url: () => `/text-to-audio` }, getSuggested: { method: "GET", url: message_id => `/messages/${message_id}/suggested` }, stopChat: { method: "POST", url: task_id => `/chat-messages/${task_id}/stop` }, runWorkflow: { method: "POST", url: () => `/workflows/run` }, checkWorkflow: { method: "GET", url: workflow_id => `/workflows/run/${workflow_id}` }, stopWorkflow: { method: "POST", url: task_id => `/workflows/tasks/${task_id}/stop` }, getWorkflowLogs: { method: "GET", url: () => `/workflows/logs` }, getAnnotations: { method: "GET", url: () => `/apps/annotations` }, createAnnotation: { method: "POST", url: '/apps/annotations' }, updateAnnotation: { method: "PUT", url: annotation_id => `/apps/annotations/${annotation_id}` }, deleteAnnotation: { method: "DELETE", url: annotation_id => `/apps/annotations/${annotation_id}` }, replyAnnotation: { method: "POST", url: action => `/apps/annotation-reply/${action}` }, checkAnnotation: { method: "GET", url: (action, job_id) => `/apps/annotation-reply/${action}/status/${job_id}` } }; 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 (0, _axios.default)({ method, url, data, params, headers, responseType: "stream" }); } else { response = await (0, _axios.default)({ 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); } getInfo(user) { const params = { user }; return this.sendRequest(routes.getInfo.method, routes.getInfo.url(), null, params); } fileUpload(data) { return this.sendRequest(routes.fileUpload.method, routes.fileUpload.url(), data, null, false, { "Content-Type": 'multipart/form-data' }); } aduioToText(data) { return this.sendRequest(routes.aduioToText.method, routes.aduioToText.url(), data, null, false, { "Content-Type": 'multipart/form-data' }); } textToAudio(data) { return this.sendRequest(routes.textToAudio.method, routes.textToAudio.url(), data, null, false, { "Content-Type": 'multipart/form-data' }); } } exports.DifyClient = DifyClient; class WorkflowClient extends DifyClient { checkWorkflow(workflow_id) { return this.sendRequest(routes.checkWorkflow.method, routes.checkWorkflow.url(workflow_id), null); } stopWorkflow(task_id, user) { const data = { user }; return this.sendRequest(routes.stopWorkflow.method, routes.stopWorkflow.url(task_id), data); } getWorkflowLogs(keyword, status, page = 1, limit = null) { const params = { keyword, status, page, limit }; return this.sendRequest(routes.getWorkflowLogs.method, routes.getWorkflowLogs.url(), null, params); } 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); } } exports.WorkflowClient = WorkflowClient; 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); } 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); } 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); } 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); } stopChat(task_id, user) { const data = { user }; return this.sendRequest(routes.stopChat.method, routes.stopChat.url(task_id), data); } getSuggested(message_id, user) { const params = { user }; return this.sendRequest(routes.getSuggested.method, routes.getSuggested.url(message_id), null, params); } getMeta(user) { const params = { user }; return this.sendRequest(routes.getMeta.method, routes.getMeta.url(), null, params); } getAnnotations(first_id = null, limit = null) { const params = { first_id, limit }; return this.sendRequest(routes.getAnnotations.method, routes.getAnnotations.url(), null, params); } createAnnotation(question, answer) { return this.sendRequest(routes.createAnnotation.method, routes.createAnnotation.url(), { question, answer }); } updateAnnotation(annotation_id, question, answer) { return this.sendRequest(routes.updateAnnotation.method, routes.updateAnnotation.url(annotation_id), { question, answer }); } deleteAnnotation(annotation_id) { return this.sendRequest(routes.deleteAnnotation.method, routes.deleteAnnotation.url(annotation_id), null); } replyAnnotation(action, embedding_model_provider, embedding_model, score_threshold) { return this.sendRequest(routes.replyAnnotation.method, routes.replyAnnotation.url(action), null, { embedding_model_provider, embedding_model, score_threshold }); } checkAnnotation(action, job_id) { return this.sendRequest(routes.checkAnnotation.method, routes.checkAnnotation.url(action, job_id), null); } } exports.ChatClient = ChatClient;