Fix summary size issue
This commit is contained in:
		
							parent
							
								
									18e10b38d1
								
							
						
					
					
						commit
						7f29f87ca6
					
				| 
						 | 
					@ -233,6 +233,10 @@
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    focusInput()
 | 
					    focusInput()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    chatRequest.updating = true
 | 
				
			||||||
 | 
					    chatRequest.updatingMessage = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
      const response = await chatRequest.sendRequest(chat.messages, {
 | 
					      const response = await chatRequest.sendRequest(chat.messages, {
 | 
				
			||||||
        chat,
 | 
					        chat,
 | 
				
			||||||
        autoAddMessages: true, // Auto-add and update messages in array
 | 
					        autoAddMessages: true, // Auto-add and update messages in array
 | 
				
			||||||
| 
						 | 
					@ -247,6 +251,13 @@
 | 
				
			||||||
      if (message) {
 | 
					      if (message) {
 | 
				
			||||||
        ttsStart(message.content, recorded)
 | 
					        ttsStart(message.content, recorded)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      console.error(e)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    chatRequest.updating = false
 | 
				
			||||||
 | 
					    chatRequest.updatingMessage = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    focusInput()
 | 
					    focusInput()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@
 | 
				
			||||||
    import { getRequestSettingList, defaultModel } from './Settings.svelte'
 | 
					    import { getRequestSettingList, defaultModel } from './Settings.svelte'
 | 
				
			||||||
    import { EventStreamContentType, fetchEventSource } from '@microsoft/fetch-event-source'
 | 
					    import { EventStreamContentType, fetchEventSource } from '@microsoft/fetch-event-source'
 | 
				
			||||||
    import { getApiBase, getEndpointCompletions } from './ApiUtil.svelte'
 | 
					    import { getApiBase, getEndpointCompletions } from './ApiUtil.svelte'
 | 
				
			||||||
 | 
					    import { v4 as uuidv4 } from 'uuid'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class ChatRequest {
 | 
					export class ChatRequest {
 | 
				
			||||||
      constructor () {
 | 
					      constructor () {
 | 
				
			||||||
| 
						 | 
					@ -302,16 +303,18 @@ export class ChatRequest {
 | 
				
			||||||
          const getSS = ():number => (ss < 1 && ss > 0)
 | 
					          const getSS = ():number => (ss < 1 && ss > 0)
 | 
				
			||||||
            ? Math.round(reductionPoolSize * ss) // If summarySize between 0 and 1, use percentage of reduced
 | 
					            ? Math.round(reductionPoolSize * ss) // If summarySize between 0 and 1, use percentage of reduced
 | 
				
			||||||
            : Math.min(ss, reductionPoolSize * 0.5) // If > 1, use token count
 | 
					            : Math.min(ss, reductionPoolSize * 0.5) // If > 1, use token count
 | 
				
			||||||
          let promptSummary = prepareSummaryPrompt(chatId, reductionPoolSize)
 | 
					          let maxSummaryTokens = getSS()
 | 
				
			||||||
 | 
					          let promptSummary = prepareSummaryPrompt(chatId, maxSummaryTokens)
 | 
				
			||||||
          const summaryRequest = { role: 'user', content: promptSummary } as Message
 | 
					          const summaryRequest = { role: 'user', content: promptSummary } as Message
 | 
				
			||||||
          let promptSummarySize = countMessageTokens(summaryRequest, model)
 | 
					          let promptSummarySize = countMessageTokens(summaryRequest, model)
 | 
				
			||||||
          // Make sure there is enough room to generate the summary, and try to make sure
 | 
					          // Make sure there is enough room to generate the summary, and try to make sure
 | 
				
			||||||
          // the last prompt is a user prompt as that seems to work better for summaries
 | 
					          // the last prompt is a user prompt as that seems to work better for summaries
 | 
				
			||||||
          while ((reductionPoolSize + promptSummarySize + getSS()) >= maxTokens ||
 | 
					          while ((reductionPoolSize + promptSummarySize + maxSummaryTokens) >= maxTokens ||
 | 
				
			||||||
              (reductionPoolSize >= 100 && rw[rw.length - 1]?.role !== 'user')) {
 | 
					              (reductionPoolSize >= 100 && rw[rw.length - 1]?.role !== 'user')) {
 | 
				
			||||||
            bottom.unshift(rw.pop() as Message)
 | 
					            bottom.unshift(rw.pop() as Message)
 | 
				
			||||||
            reductionPoolSize = countPromptTokens(rw, model)
 | 
					            reductionPoolSize = countPromptTokens(rw, model)
 | 
				
			||||||
            promptSummary = prepareSummaryPrompt(chatId, reductionPoolSize)
 | 
					            maxSummaryTokens = getSS()
 | 
				
			||||||
 | 
					            promptSummary = prepareSummaryPrompt(chatId, maxSummaryTokens)
 | 
				
			||||||
            summaryRequest.content = promptSummary
 | 
					            summaryRequest.content = promptSummary
 | 
				
			||||||
            promptSummarySize = countMessageTokens(summaryRequest, model)
 | 
					            promptSummarySize = countMessageTokens(summaryRequest, model)
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
| 
						 | 
					@ -321,13 +324,15 @@ export class ChatRequest {
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // Create a message the summary will be loaded into
 | 
					          // Create a message the summary will be loaded into
 | 
				
			||||||
          const summaryResponse = {
 | 
					          const srid = uuidv4()
 | 
				
			||||||
 | 
					          const summaryResponse:Message = {
 | 
				
			||||||
            role: 'assistant',
 | 
					            role: 'assistant',
 | 
				
			||||||
            content: '',
 | 
					            content: '',
 | 
				
			||||||
 | 
					            uuid: srid,
 | 
				
			||||||
            streaming: opts.streaming,
 | 
					            streaming: opts.streaming,
 | 
				
			||||||
            summary: [] as string[],
 | 
					            summary: [] as string[],
 | 
				
			||||||
            model
 | 
					            model
 | 
				
			||||||
          } as Message
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // Insert summary completion prompt after that last message we're summarizing
 | 
					          // Insert summary completion prompt after that last message we're summarizing
 | 
				
			||||||
          insertMessages(chatId, rw[rw.length - 1], [summaryResponse])
 | 
					          insertMessages(chatId, rw[rw.length - 1], [summaryResponse])
 | 
				
			||||||
| 
						 | 
					@ -335,10 +340,11 @@ export class ChatRequest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // Request and load the summarization prompt
 | 
					          // Request and load the summarization prompt
 | 
				
			||||||
          _this.updatingMessage = 'Summarizing...'
 | 
					          _this.updatingMessage = 'Summarizing...'
 | 
				
			||||||
 | 
					          try {
 | 
				
			||||||
            const summary = await _this.sendRequest(top.concat(rw).concat([summaryRequest]), {
 | 
					            const summary = await _this.sendRequest(top.concat(rw).concat([summaryRequest]), {
 | 
				
			||||||
              summaryRequest: true,
 | 
					              summaryRequest: true,
 | 
				
			||||||
              streaming: opts.streaming,
 | 
					              streaming: opts.streaming,
 | 
				
			||||||
            maxTokens: chatSettings.summarySize,
 | 
					              maxTokens: maxSummaryTokens,
 | 
				
			||||||
              fillMessage: summaryResponse,
 | 
					              fillMessage: summaryResponse,
 | 
				
			||||||
              autoAddMessages: true,
 | 
					              autoAddMessages: true,
 | 
				
			||||||
              onMessageChange: (m) => {
 | 
					              onMessageChange: (m) => {
 | 
				
			||||||
| 
						 | 
					@ -374,6 +380,12 @@ export class ChatRequest {
 | 
				
			||||||
                didSummary: true
 | 
					                didSummary: true
 | 
				
			||||||
              })
 | 
					              })
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					          } catch (e) {
 | 
				
			||||||
 | 
					            _this.updating = false
 | 
				
			||||||
 | 
					            _this.updatingMessage = ''
 | 
				
			||||||
 | 
					            deleteMessage(chatId, srid)
 | 
				
			||||||
 | 
					            throw e
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          /***************
 | 
					          /***************
 | 
				
			||||||
           * Unknown mode.
 | 
					           * Unknown mode.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue