mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-03 20:33:00 +00:00 
			
		
		
		
	Complete type defined. (#1200)
This commit is contained in:
		
							parent
							
								
									1367f34398
								
							
						
					
					
						commit
						e65f9cb17a
					
				@ -1,9 +1,10 @@
 | 
				
			|||||||
'use client'
 | 
					'use client'
 | 
				
			||||||
import React from 'react'
 | 
					import { useRef, useState } from 'react'
 | 
				
			||||||
import { t } from 'i18next'
 | 
					import { t } from 'i18next'
 | 
				
			||||||
import copy from 'copy-to-clipboard'
 | 
					import copy from 'copy-to-clipboard'
 | 
				
			||||||
import s from './style.module.css'
 | 
					import s from './style.module.css'
 | 
				
			||||||
import Tooltip from '@/app/components/base/tooltip'
 | 
					import Tooltip from '@/app/components/base/tooltip'
 | 
				
			||||||
 | 
					import { randomString } from '@/utils'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ICopyBtnProps = {
 | 
					type ICopyBtnProps = {
 | 
				
			||||||
  value: string
 | 
					  value: string
 | 
				
			||||||
@ -16,12 +17,13 @@ const CopyBtn = ({
 | 
				
			|||||||
  className,
 | 
					  className,
 | 
				
			||||||
  isPlain,
 | 
					  isPlain,
 | 
				
			||||||
}: ICopyBtnProps) => {
 | 
					}: ICopyBtnProps) => {
 | 
				
			||||||
  const [isCopied, setIsCopied] = React.useState(false)
 | 
					  const [isCopied, setIsCopied] = useState(false)
 | 
				
			||||||
 | 
					  const selector = useRef(`copy-tooltip-${randomString(4)}`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <div className={`${className}`}>
 | 
					    <div className={`${className}`}>
 | 
				
			||||||
      <Tooltip
 | 
					      <Tooltip
 | 
				
			||||||
        selector={`copy-btn-tooltip-${value}`}
 | 
					        selector={selector.current}
 | 
				
			||||||
        content={(isCopied ? t('appApi.copied') : t('appApi.copy')) as string}
 | 
					        content={(isCopied ? t('appApi.copied') : t('appApi.copy')) as string}
 | 
				
			||||||
        className='z-10'
 | 
					        className='z-10'
 | 
				
			||||||
      >
 | 
					      >
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,8 @@ import OpeningStatement from '@/app/components/app/configuration/features/chat-g
 | 
				
			|||||||
import GroupName from '@/app/components/app/configuration/base/group-name'
 | 
					import GroupName from '@/app/components/app/configuration/base/group-name'
 | 
				
			||||||
import Loading from '@/app/components/base/loading'
 | 
					import Loading from '@/app/components/base/loading'
 | 
				
			||||||
import Confirm from '@/app/components/base/confirm'
 | 
					import Confirm from '@/app/components/base/confirm'
 | 
				
			||||||
 | 
					// type
 | 
				
			||||||
 | 
					import type { AutomaticRes } from '@/service/debug'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const noDataIcon = (
 | 
					const noDataIcon = (
 | 
				
			||||||
  <svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
 | 
					  <svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
@ -21,12 +23,6 @@ const noDataIcon = (
 | 
				
			|||||||
  </svg>
 | 
					  </svg>
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type AutomaticRes = {
 | 
					 | 
				
			||||||
  prompt: string
 | 
					 | 
				
			||||||
  variables: string[]
 | 
					 | 
				
			||||||
  opening_statement: string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export type IGetAutomaticResProps = {
 | 
					export type IGetAutomaticResProps = {
 | 
				
			||||||
  mode: AppType
 | 
					  mode: AppType
 | 
				
			||||||
  isShow: boolean
 | 
					  isShow: boolean
 | 
				
			||||||
@ -98,7 +94,7 @@ const GetAutomaticRes: FC<IGetAutomaticResProps> = ({
 | 
				
			|||||||
        audiences,
 | 
					        audiences,
 | 
				
			||||||
        hoping_to_solve: hopingToSolve,
 | 
					        hoping_to_solve: hopingToSolve,
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      setRes(res as AutomaticRes)
 | 
					      setRes(res)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    finally {
 | 
					    finally {
 | 
				
			||||||
      setLoadingFalse()
 | 
					      setLoadingFalse()
 | 
				
			||||||
@ -193,7 +189,7 @@ const GetAutomaticRes: FC<IGetAutomaticResProps> = ({
 | 
				
			|||||||
            onClose={() => setShowConfirmOverwrite(false)}
 | 
					            onClose={() => setShowConfirmOverwrite(false)}
 | 
				
			||||||
            onConfirm={() => {
 | 
					            onConfirm={() => {
 | 
				
			||||||
              setShowConfirmOverwrite(false)
 | 
					              setShowConfirmOverwrite(false)
 | 
				
			||||||
              onFinished(res as AutomaticRes)
 | 
					              onFinished(res!)
 | 
				
			||||||
            }}
 | 
					            }}
 | 
				
			||||||
            onCancel={() => setShowConfirmOverwrite(false)}
 | 
					            onCancel={() => setShowConfirmOverwrite(false)}
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
 | 
				
			|||||||
@ -77,18 +77,18 @@ export function format(text: string) {
 | 
				
			|||||||
  return res.replaceAll('\n', '<br/>').replaceAll('```', '')
 | 
					  return res.replaceAll('\n', '<br/>').replaceAll('```', '')
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const handleStream = (response: any, onData: IOnData, onCompleted?: IOnCompleted, onThought?: IOnThought, onMessageEnd?: IOnMessageEnd) => {
 | 
					const handleStream = (response: Response, onData: IOnData, onCompleted?: IOnCompleted, onThought?: IOnThought, onMessageEnd?: IOnMessageEnd) => {
 | 
				
			||||||
  if (!response.ok)
 | 
					  if (!response.ok)
 | 
				
			||||||
    throw new Error('Network response was not ok')
 | 
					    throw new Error('Network response was not ok')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const reader = response.body.getReader()
 | 
					  const reader = response.body?.getReader()
 | 
				
			||||||
  const decoder = new TextDecoder('utf-8')
 | 
					  const decoder = new TextDecoder('utf-8')
 | 
				
			||||||
  let buffer = ''
 | 
					  let buffer = ''
 | 
				
			||||||
  let bufferObj: any
 | 
					  let bufferObj: Record<string, any>
 | 
				
			||||||
  let isFirstMessage = true
 | 
					  let isFirstMessage = true
 | 
				
			||||||
  function read() {
 | 
					  function read() {
 | 
				
			||||||
    let hasError = false
 | 
					    let hasError = false
 | 
				
			||||||
    reader.read().then((result: any) => {
 | 
					    reader?.read().then((result: any) => {
 | 
				
			||||||
      if (result.done) {
 | 
					      if (result.done) {
 | 
				
			||||||
        onCompleted && onCompleted()
 | 
					        onCompleted && onCompleted()
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
@ -99,7 +99,7 @@ const handleStream = (response: any, onData: IOnData, onCompleted?: IOnCompleted
 | 
				
			|||||||
        lines.forEach((message) => {
 | 
					        lines.forEach((message) => {
 | 
				
			||||||
          if (message.startsWith('data: ')) { // check if it starts with data:
 | 
					          if (message.startsWith('data: ')) { // check if it starts with data:
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
              bufferObj = JSON.parse(message.substring(6)) // remove data: and parse as json
 | 
					              bufferObj = JSON.parse(message.substring(6)) as Record<string, any>// remove data: and parse as json
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (e) {
 | 
					            catch (e) {
 | 
				
			||||||
              // mute handle message cut off
 | 
					              // mute handle message cut off
 | 
				
			||||||
@ -113,11 +113,11 @@ const handleStream = (response: any, onData: IOnData, onCompleted?: IOnCompleted
 | 
				
			|||||||
              onData('', false, {
 | 
					              onData('', false, {
 | 
				
			||||||
                conversationId: undefined,
 | 
					                conversationId: undefined,
 | 
				
			||||||
                messageId: '',
 | 
					                messageId: '',
 | 
				
			||||||
                errorMessage: bufferObj.message,
 | 
					                errorMessage: bufferObj?.message,
 | 
				
			||||||
                errorCode: bufferObj.code,
 | 
					                errorCode: bufferObj?.code,
 | 
				
			||||||
              })
 | 
					              })
 | 
				
			||||||
              hasError = true
 | 
					              hasError = true
 | 
				
			||||||
              onCompleted && onCompleted(true)
 | 
					              onCompleted?.(true)
 | 
				
			||||||
              return
 | 
					              return
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (bufferObj.event === 'message') {
 | 
					            if (bufferObj.event === 'message') {
 | 
				
			||||||
@ -130,10 +130,10 @@ const handleStream = (response: any, onData: IOnData, onCompleted?: IOnCompleted
 | 
				
			|||||||
              isFirstMessage = false
 | 
					              isFirstMessage = false
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (bufferObj.event === 'agent_thought') {
 | 
					            else if (bufferObj.event === 'agent_thought') {
 | 
				
			||||||
              onThought?.(bufferObj as any)
 | 
					              onThought?.(bufferObj as ThoughtItem)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (bufferObj.event === 'message_end') {
 | 
					            else if (bufferObj.event === 'message_end') {
 | 
				
			||||||
              onMessageEnd?.(bufferObj as any)
 | 
					              onMessageEnd?.(bufferObj as MessageEnd)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
@ -146,7 +146,7 @@ const handleStream = (response: any, onData: IOnData, onCompleted?: IOnCompleted
 | 
				
			|||||||
          errorMessage: `${e}`,
 | 
					          errorMessage: `${e}`,
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        hasError = true
 | 
					        hasError = true
 | 
				
			||||||
        onCompleted && onCompleted(true)
 | 
					        onCompleted?.(true)
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (!hasError)
 | 
					      if (!hasError)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,12 @@
 | 
				
			|||||||
import type { IOnCompleted, IOnData, IOnError, IOnMessageEnd } from './base'
 | 
					import type { IOnCompleted, IOnData, IOnError, IOnMessageEnd } from './base'
 | 
				
			||||||
import { get, post, ssePost } from './base'
 | 
					import { get, post, ssePost } from './base'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type AutomaticRes = {
 | 
				
			||||||
 | 
					  prompt: string
 | 
				
			||||||
 | 
					  variables: string[]
 | 
				
			||||||
 | 
					  opening_statement: string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const sendChatMessage = async (appId: string, body: Record<string, any>, { onData, onCompleted, onError, getAbortController, onMessageEnd }: {
 | 
					export const sendChatMessage = async (appId: string, body: Record<string, any>, { onData, onCompleted, onError, getAbortController, onMessageEnd }: {
 | 
				
			||||||
  onData: IOnData
 | 
					  onData: IOnData
 | 
				
			||||||
  onCompleted: IOnCompleted
 | 
					  onCompleted: IOnCompleted
 | 
				
			||||||
@ -46,7 +52,7 @@ export const fetchConvesationMessages = (appId: string, conversation_id: string)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const generateRule = (body: Record<string, any>) => {
 | 
					export const generateRule = (body: Record<string, any>) => {
 | 
				
			||||||
  return post('/rule-generate', {
 | 
					  return post<AutomaticRes>('/rule-generate', {
 | 
				
			||||||
    body,
 | 
					    body,
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user