index.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import axios from 'axios'
  2. export const BASE_URL = 'https://api.dify.ai/v1'
  3. export const routes = {
  4. application: {
  5. method: 'GET',
  6. url: () => `/parameters`
  7. },
  8. feedback: {
  9. method: 'POST',
  10. url: (messageId) => `/messages/${messageId}/feedbacks`,
  11. },
  12. createCompletionMessage: {
  13. method: 'POST',
  14. url: () => `/completion-messages`,
  15. },
  16. createChatMessage: {
  17. method: 'POST',
  18. url: () => `/chat-messages`,
  19. },
  20. getConversationMessages: {
  21. method: 'GET',
  22. url: () => '/messages',
  23. },
  24. getConversations: {
  25. method: 'GET',
  26. url: () => '/conversations',
  27. },
  28. renameConversation: {
  29. method: 'PATCH',
  30. url: (conversationId) => `/conversations/${conversationId}`,
  31. }
  32. }
  33. export class DifyClient {
  34. constructor(apiKey, baseUrl = BASE_URL) {
  35. this.apiKey = apiKey
  36. this.baseUrl = baseUrl
  37. }
  38. updateApiKey(apiKey) {
  39. this.apiKey = apiKey
  40. }
  41. async sendRequest(method, endpoint, data = null, params = null, stream = false) {
  42. const headers = {
  43. 'Authorization': `Bearer ${this.apiKey}`,
  44. 'Content-Type': 'application/json',
  45. }
  46. const url = `${this.baseUrl}${endpoint}`
  47. let response
  48. if (!stream) {
  49. response = await axios({
  50. method,
  51. url,
  52. data,
  53. params,
  54. headers,
  55. responseType: stream ? 'stream' : 'json',
  56. })
  57. } else {
  58. response = await fetch(url, {
  59. headers,
  60. method,
  61. body: JSON.stringify(data),
  62. })
  63. }
  64. return response
  65. }
  66. messageFeedback(messageId, rating, user) {
  67. const data = {
  68. rating,
  69. user,
  70. }
  71. return this.sendRequest(routes.feedback.method, routes.feedback.url(messageId), data)
  72. }
  73. getApplicationParameters(user) {
  74. const params = { user }
  75. return this.sendRequest(routes.application.method, routes.application.url(), null, params)
  76. }
  77. }
  78. export class CompletionClient extends DifyClient {
  79. createCompletionMessage(inputs, query, user, responseMode) {
  80. const data = {
  81. inputs,
  82. query,
  83. responseMode,
  84. user,
  85. }
  86. return this.sendRequest(routes.createCompletionMessage.method, routes.createCompletionMessage.url(), data, null, responseMode === 'streaming')
  87. }
  88. }
  89. export class ChatClient extends DifyClient {
  90. createChatMessage(inputs, query, user, responseMode = 'blocking', conversationId = null) {
  91. const data = {
  92. inputs,
  93. query,
  94. user,
  95. responseMode,
  96. }
  97. if (conversationId)
  98. data.conversation_id = conversationId
  99. return this.sendRequest(routes.createChatMessage.method, routes.createChatMessage.url(), data, null, responseMode === 'streaming')
  100. }
  101. getConversationMessages(user, conversationId = '', firstId = null, limit = null) {
  102. const params = { user }
  103. if (conversationId)
  104. params.conversation_id = conversationId
  105. if (firstId)
  106. params.first_id = firstId
  107. if (limit)
  108. params.limit = limit
  109. return this.sendRequest(routes.getConversationMessages.method, routes.getConversationMessages.url(), null, params)
  110. }
  111. getConversations(user, firstId = null, limit = null, pinned = null) {
  112. const params = { user, first_id: firstId, limit, pinned }
  113. return this.sendRequest(routes.getConversations.method, routes.getConversations.url(), null, params)
  114. }
  115. renameConversation(conversationId, name, user) {
  116. const data = { name, user }
  117. return this.sendRequest(routes.renameConversation.method, routes.renameConversation.url(conversationId), data)
  118. }
  119. }