From a10e492922556a4950805156a2b9a7de1cfb2a6a Mon Sep 17 00:00:00 2001 From: HoshinoSuzumi Date: Tue, 2 Apr 2024 19:23:36 +0800 Subject: [PATCH] feat: chat histories trim by @uniiem/object-trim --- package.json | 1 + pages/aigc/chat/index.vue | 12 ++++-------- utils/object-trimmer.ts | 26 -------------------------- yarn.lock | 36 ++++++++---------------------------- 4 files changed, 13 insertions(+), 62 deletions(-) delete mode 100644 utils/object-trimmer.ts diff --git a/package.json b/package.json index d4341fb..00b9c0e 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@iconify-json/svg-spinners": "^1.1.2", "@iconify-json/tabler": "^1.1.105", "@nuxt/ui": "^2.14.1", + "@uniiem/object-trim": "^0.2.0", "@uniiem/uuid": "^0.2.1", "highlight.js": "^11.9.0", "idb-keyval": "^6.2.1", diff --git a/pages/aigc/chat/index.vue b/pages/aigc/chat/index.vue index 58afd7c..cf4023d 100644 --- a/pages/aigc/chat/index.vue +++ b/pages/aigc/chat/index.vue @@ -5,7 +5,7 @@ import type {ChatMessage, ChatMessageId, ChatSessionId} from "~/typings/llm"; import {useHistory} from "~/composables/useHistory"; import {uuidv4} from "@uniiem/uuid"; import {useLLM} from "~/composables/useLLM"; -import {objectTrimmer} from "~/utils/object-trimmer"; +import {trimObject} from "@uniiem/object-trim"; useHead({ title: '聊天 | XSH AI' @@ -125,13 +125,9 @@ const handleClickSend = (event: any) => { content: '', }) // 请求模型回复 - const trimmedMessages = objectTrimmer( - getMessages(), - 200, - { - participatingFields: ['content'] - } - ) + const trimmedMessages = trimObject(getMessages(), 2000, { + keys: ['content'] + }) useLLM(trimmedMessages, { modelTag: 'spark3_5' }).then(reply => { diff --git a/utils/object-trimmer.ts b/utils/object-trimmer.ts deleted file mode 100644 index 726313d..0000000 --- a/utils/object-trimmer.ts +++ /dev/null @@ -1,26 +0,0 @@ -const objectTrimmer = ( - objectList: T[], - length: number, - { - participatingFields = [], - trimFromStart = true - }: { - participatingFields: (keyof T)[], - trimFromStart?: boolean - }) => { - let participatingLength = 0 - let i = objectList.length - 1 - while (i >= 0) { - participatingLength = 0 - for (const field of participatingFields) { - participatingLength += JSON.stringify(objectList[i][field]).length - if (participatingLength > length) { - break - } - } - i-- - } - return trimFromStart ? objectList.slice(i + 1) : objectList.slice(0, i + 1) -} - -export {objectTrimmer} diff --git a/yarn.lock b/yarn.lock index 2705332..e1de619 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2400,6 +2400,11 @@ hookable "^5.5.3" unhead "1.8.10" +"@uniiem/object-trim@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@uniiem/object-trim/-/object-trim-0.2.0.tgz#c80b07a0ace3d74ef89c12091835e2cf6d4d0825" + integrity sha512-xyhVaXuPNit1s9eZKGMGSmlfdG99LrmiPyku9ljlVy5at7Mro3KL3DGOa/GPg4xQaUY7NO3VuPvVU736EqeKYg== + "@uniiem/uuid@^0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@uniiem/uuid/-/uuid-0.2.1.tgz#2ffa44624968cda47ef744770b2b58f5e5e558f8" @@ -7210,16 +7215,7 @@ streamx@^2.15.0: optionalDependencies: bare-events "^2.2.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7302,14 +7298,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -8351,16 +8340,7 @@ workbox-window@7.0.0, workbox-window@^7.0.0: "@types/trusted-types" "^2.0.2" workbox-core "7.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==