universal-chat.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import type { IOnCompleted, IOnData, IOnError, IOnMessageEnd, IOnThought } from './base'
  2. import {
  3. del, get, patch, post, ssePost,
  4. } from './base'
  5. import type { Feedbacktype } from '@/app/components/app/chat/type'
  6. const baseUrl = 'universal-chat'
  7. function getUrl(url: string) {
  8. return `${baseUrl}/${url.startsWith('/') ? url.slice(1) : url}`
  9. }
  10. export const sendChatMessage = async (body: Record<string, any>, { onData, onCompleted, onError, onThought, onMessageEnd, getAbortController }: {
  11. onData: IOnData
  12. onCompleted: IOnCompleted
  13. onError: IOnError
  14. onThought: IOnThought
  15. onMessageEnd: IOnMessageEnd
  16. getAbortController?: (abortController: AbortController) => void
  17. }) => {
  18. return ssePost(getUrl('messages'), {
  19. body: {
  20. ...body,
  21. response_mode: 'streaming',
  22. },
  23. }, { onData, onCompleted, onThought, onError, getAbortController, onMessageEnd })
  24. }
  25. export const stopChatMessageResponding = async (taskId: string) => {
  26. return post(getUrl(`messages/${taskId}/stop`))
  27. }
  28. export const fetchConversations = async (last_id?: string, pinned?: boolean, limit?: number) => {
  29. return get(getUrl('conversations'), { params: { ...{ limit: limit || 20 }, ...(last_id ? { last_id } : {}), ...(pinned !== undefined ? { pinned } : {}) } })
  30. }
  31. export const pinConversation = async (id: string) => {
  32. return patch(getUrl(`conversations/${id}/pin`))
  33. }
  34. export const unpinConversation = async (id: string) => {
  35. return patch(getUrl(`conversations/${id}/unpin`))
  36. }
  37. export const delConversation = async (id: string) => {
  38. return del(getUrl(`conversations/${id}`))
  39. }
  40. export const renameConversation = async (id: string, name: string) => {
  41. return post(getUrl(`conversations/${id}/name`), { body: { name } })
  42. }
  43. export const generationConversationName = async (id: string) => {
  44. return post(getUrl(`conversations/${id}/name`), { body: { auto_generate: true } })
  45. }
  46. export const fetchChatList = async (conversationId: string) => {
  47. return get(getUrl('messages'), { params: { conversation_id: conversationId, limit: 20, last_id: '' } })
  48. }
  49. // init value. wait for server update
  50. export const fetchAppParams = async () => {
  51. return get(getUrl('parameters'))
  52. }
  53. export const updateFeedback = async ({ url, body }: { url: string; body: Feedbacktype }) => {
  54. return post(getUrl(url), { body })
  55. }
  56. export const fetchMoreLikeThis = async (messageId: string) => {
  57. return get(getUrl(`/messages/${messageId}/more-like-this`), {
  58. params: {
  59. response_mode: 'blocking',
  60. },
  61. })
  62. }
  63. export const fetchSuggestedQuestions = (messageId: string) => {
  64. return get(getUrl(`/messages/${messageId}/suggested-questions`))
  65. }
  66. export const audioToText = (url: string, body: FormData) => {
  67. return post(url, { body }, { bodyStringify: false, deleteContentType: true }) as Promise<{ text: string }>
  68. }