byt-lingxiao-ai 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/AiMessage.vue +5 -5
- package/components/ChatWindow.vue +5 -0
- package/components/ChatWindowDialog.vue +5 -1
- package/components/ChatWindowHeader.vue +7 -3
- package/components/config/index.js +1 -1
- package/components/mixins/audioMixin.js +22 -12
- package/components/mixins/messageMixin.js +6 -5
- package/components/mixins/webSocketMixin.js +13 -0
- package/components/utils/Cookie.js +19 -0
- package/components/utils/StreamParser.js +9 -0
- package/components/utils/Uuid.js +6 -0
- package/components/utils/WorkletSource.js +27 -0
- package/dist/index.common.js +126 -54
- package/dist/index.common.js.map +1 -1
- package/dist/index.css +2 -2
- package/dist/index.umd.js +126 -54
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +1 -1
package/dist/index.common.js
CHANGED
|
@@ -28450,7 +28450,7 @@ if (typeof window !== 'undefined') {
|
|
|
28450
28450
|
var es_iterator_constructor = __webpack_require__(8111);
|
|
28451
28451
|
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.for-each.js
|
|
28452
28452
|
var es_iterator_for_each = __webpack_require__(7588);
|
|
28453
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindow.vue?vue&type=template&id=
|
|
28453
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindow.vue?vue&type=template&id=0e3e6d50&scoped=true
|
|
28454
28454
|
var render = function render() {
|
|
28455
28455
|
var _vm = this,
|
|
28456
28456
|
_c = _vm._self._c;
|
|
@@ -28484,7 +28484,8 @@ var render = function render() {
|
|
|
28484
28484
|
attrs: {
|
|
28485
28485
|
"messages": _vm.messages,
|
|
28486
28486
|
"input-message": _vm.inputMessage,
|
|
28487
|
-
"think-status": _vm.thinkStatus
|
|
28487
|
+
"think-status": _vm.thinkStatus,
|
|
28488
|
+
"chat-id": _vm.chatId
|
|
28488
28489
|
},
|
|
28489
28490
|
on: {
|
|
28490
28491
|
"update:inputMessage": function ($event) {
|
|
@@ -28741,8 +28742,8 @@ var ChatAvatar_component = normalizeComponent(
|
|
|
28741
28742
|
)
|
|
28742
28743
|
|
|
28743
28744
|
/* harmony default export */ var ChatAvatar = (ChatAvatar_component.exports);
|
|
28744
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowDialog.vue?vue&type=template&id=
|
|
28745
|
-
var
|
|
28745
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowDialog.vue?vue&type=template&id=23a76780&scoped=true
|
|
28746
|
+
var ChatWindowDialogvue_type_template_id_23a76780_scoped_true_render = function render() {
|
|
28746
28747
|
var _vm = this,
|
|
28747
28748
|
_c = _vm._self._c;
|
|
28748
28749
|
return _c('div', {
|
|
@@ -28766,6 +28767,9 @@ var ChatWindowDialogvue_type_template_id_1424b8b1_scoped_true_render = function
|
|
|
28766
28767
|
}
|
|
28767
28768
|
}
|
|
28768
28769
|
}, [_c('ChatWindowHeader', {
|
|
28770
|
+
attrs: {
|
|
28771
|
+
"chat-id": _vm.chatId
|
|
28772
|
+
},
|
|
28769
28773
|
on: {
|
|
28770
28774
|
"close": function ($event) {
|
|
28771
28775
|
return _vm.$emit('input', false);
|
|
@@ -28797,10 +28801,10 @@ var ChatWindowDialogvue_type_template_id_1424b8b1_scoped_true_render = function
|
|
|
28797
28801
|
}
|
|
28798
28802
|
})], 1)]);
|
|
28799
28803
|
};
|
|
28800
|
-
var
|
|
28804
|
+
var ChatWindowDialogvue_type_template_id_23a76780_scoped_true_staticRenderFns = [];
|
|
28801
28805
|
|
|
28802
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowHeader.vue?vue&type=template&id=
|
|
28803
|
-
var
|
|
28806
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowHeader.vue?vue&type=template&id=90d9b166&scoped=true
|
|
28807
|
+
var ChatWindowHeadervue_type_template_id_90d9b166_scoped_true_render = function render() {
|
|
28804
28808
|
var _vm = this,
|
|
28805
28809
|
_c = _vm._self._c;
|
|
28806
28810
|
return _c('div', {
|
|
@@ -28885,26 +28889,30 @@ var ChatWindowHeadervue_type_template_id_428ec56e_scoped_true_render = function
|
|
|
28885
28889
|
}
|
|
28886
28890
|
})])])]);
|
|
28887
28891
|
};
|
|
28888
|
-
var
|
|
28892
|
+
var ChatWindowHeadervue_type_template_id_90d9b166_scoped_true_staticRenderFns = [];
|
|
28889
28893
|
|
|
28890
28894
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowHeader.vue?vue&type=script&lang=js
|
|
28891
28895
|
/* harmony default export */ var ChatWindowHeadervue_type_script_lang_js = ({
|
|
28892
28896
|
name: 'ChatWindowHeader',
|
|
28897
|
+
props: {
|
|
28898
|
+
chatId: {
|
|
28899
|
+
type: String,
|
|
28900
|
+
default: ''
|
|
28901
|
+
}
|
|
28902
|
+
},
|
|
28893
28903
|
methods: {
|
|
28894
28904
|
handleOpen() {
|
|
28895
|
-
|
|
28896
|
-
// const baseUrl = window.location.protocol + '//' + window.location.hostname + ':3100/c/' + chatId;
|
|
28897
|
-
const baseUrl = window.location.protocol + '//' + window.location.hostname + ':3100/';
|
|
28905
|
+
const baseUrl = window.location.protocol + '//' + window.location.hostname + ':3100/c/' + this.chatId;
|
|
28898
28906
|
window.open(baseUrl, '_blank');
|
|
28899
28907
|
}
|
|
28900
28908
|
}
|
|
28901
28909
|
});
|
|
28902
28910
|
;// ./components/ChatWindowHeader.vue?vue&type=script&lang=js
|
|
28903
28911
|
/* harmony default export */ var components_ChatWindowHeadervue_type_script_lang_js = (ChatWindowHeadervue_type_script_lang_js);
|
|
28904
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowHeader.vue?vue&type=style&index=0&id=
|
|
28912
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowHeader.vue?vue&type=style&index=0&id=90d9b166&prod&scoped=true&lang=css
|
|
28905
28913
|
// extracted by mini-css-extract-plugin
|
|
28906
28914
|
|
|
28907
|
-
;// ./components/ChatWindowHeader.vue?vue&type=style&index=0&id=
|
|
28915
|
+
;// ./components/ChatWindowHeader.vue?vue&type=style&index=0&id=90d9b166&prod&scoped=true&lang=css
|
|
28908
28916
|
|
|
28909
28917
|
;// ./components/ChatWindowHeader.vue
|
|
28910
28918
|
|
|
@@ -28917,11 +28925,11 @@ var ChatWindowHeadervue_type_template_id_428ec56e_scoped_true_staticRenderFns =
|
|
|
28917
28925
|
|
|
28918
28926
|
var ChatWindowHeader_component = normalizeComponent(
|
|
28919
28927
|
components_ChatWindowHeadervue_type_script_lang_js,
|
|
28920
|
-
|
|
28921
|
-
|
|
28928
|
+
ChatWindowHeadervue_type_template_id_90d9b166_scoped_true_render,
|
|
28929
|
+
ChatWindowHeadervue_type_template_id_90d9b166_scoped_true_staticRenderFns,
|
|
28922
28930
|
false,
|
|
28923
28931
|
null,
|
|
28924
|
-
"
|
|
28932
|
+
"90d9b166",
|
|
28925
28933
|
null
|
|
28926
28934
|
|
|
28927
28935
|
)
|
|
@@ -29009,8 +29017,8 @@ var UserMessage_component = normalizeComponent(
|
|
|
29009
29017
|
)
|
|
29010
29018
|
|
|
29011
29019
|
/* harmony default export */ var UserMessage = (UserMessage_component.exports);
|
|
29012
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/AiMessage.vue?vue&type=template&id=
|
|
29013
|
-
var
|
|
29020
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/AiMessage.vue?vue&type=template&id=2422d7c0&scoped=true
|
|
29021
|
+
var AiMessagevue_type_template_id_2422d7c0_scoped_true_render = function render() {
|
|
29014
29022
|
var _vm = this,
|
|
29015
29023
|
_c = _vm._self._c;
|
|
29016
29024
|
return _c('div', {
|
|
@@ -29043,7 +29051,7 @@ var AiMessagevue_type_template_id_6e022f2c_scoped_true_render = function render(
|
|
|
29043
29051
|
}
|
|
29044
29052
|
})])]);
|
|
29045
29053
|
};
|
|
29046
|
-
var
|
|
29054
|
+
var AiMessagevue_type_template_id_2422d7c0_scoped_true_staticRenderFns = [];
|
|
29047
29055
|
|
|
29048
29056
|
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.filter.js
|
|
29049
29057
|
var es_iterator_filter = __webpack_require__(2489);
|
|
@@ -30855,14 +30863,14 @@ function parseMarkdown(text) {
|
|
|
30855
30863
|
html = html.replace(/^\s*\d+\.\s+(.+)$/gm, '<li>$1</li>');
|
|
30856
30864
|
html = html.replace(/^>\s+(.+)$/gm, '<blockquote>$1</blockquote>');
|
|
30857
30865
|
// 解析Markdown链接
|
|
30858
|
-
html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2"
|
|
30866
|
+
html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" aria-current="page">$1</a>');
|
|
30859
30867
|
html = html.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '<img src="$2" alt="$1" />');
|
|
30860
30868
|
html = html.replace(/^-{3,}$/gm, '<hr>');
|
|
30861
30869
|
// 解析简单URL
|
|
30862
|
-
const simpleUrlRegex = /(https?:\/\/[^\s<>"']+)/g;
|
|
30863
|
-
html = html.replace(simpleUrlRegex, match => {
|
|
30864
|
-
|
|
30865
|
-
});
|
|
30870
|
+
// const simpleUrlRegex = /(https?:\/\/[^\s<>"']+)/g;
|
|
30871
|
+
// html = html.replace(simpleUrlRegex, (match) => {
|
|
30872
|
+
// return `<a href="${match}" aria-current="page">${match}</a>`;
|
|
30873
|
+
// });
|
|
30866
30874
|
|
|
30867
30875
|
// html = html.replace(/\n/g, '<br>');
|
|
30868
30876
|
|
|
@@ -30971,10 +30979,10 @@ function escapeHtml(text) {
|
|
|
30971
30979
|
});
|
|
30972
30980
|
;// ./components/AiMessage.vue?vue&type=script&lang=js
|
|
30973
30981
|
/* harmony default export */ var components_AiMessagevue_type_script_lang_js = (AiMessagevue_type_script_lang_js);
|
|
30974
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/AiMessage.vue?vue&type=style&index=0&id=
|
|
30982
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/AiMessage.vue?vue&type=style&index=0&id=2422d7c0&prod&scoped=true&lang=css
|
|
30975
30983
|
// extracted by mini-css-extract-plugin
|
|
30976
30984
|
|
|
30977
|
-
;// ./components/AiMessage.vue?vue&type=style&index=0&id=
|
|
30985
|
+
;// ./components/AiMessage.vue?vue&type=style&index=0&id=2422d7c0&prod&scoped=true&lang=css
|
|
30978
30986
|
|
|
30979
30987
|
;// ./components/AiMessage.vue
|
|
30980
30988
|
|
|
@@ -30987,11 +30995,11 @@ function escapeHtml(text) {
|
|
|
30987
30995
|
|
|
30988
30996
|
var AiMessage_component = normalizeComponent(
|
|
30989
30997
|
components_AiMessagevue_type_script_lang_js,
|
|
30990
|
-
|
|
30991
|
-
|
|
30998
|
+
AiMessagevue_type_template_id_2422d7c0_scoped_true_render,
|
|
30999
|
+
AiMessagevue_type_template_id_2422d7c0_scoped_true_staticRenderFns,
|
|
30992
31000
|
false,
|
|
30993
31001
|
null,
|
|
30994
|
-
"
|
|
31002
|
+
"2422d7c0",
|
|
30995
31003
|
null
|
|
30996
31004
|
|
|
30997
31005
|
)
|
|
@@ -31233,15 +31241,19 @@ var ChatInputBox_component = normalizeComponent(
|
|
|
31233
31241
|
loading: {
|
|
31234
31242
|
type: Boolean,
|
|
31235
31243
|
default: false
|
|
31244
|
+
},
|
|
31245
|
+
chatId: {
|
|
31246
|
+
type: String,
|
|
31247
|
+
default: ''
|
|
31236
31248
|
}
|
|
31237
31249
|
}
|
|
31238
31250
|
});
|
|
31239
31251
|
;// ./components/ChatWindowDialog.vue?vue&type=script&lang=js
|
|
31240
31252
|
/* harmony default export */ var components_ChatWindowDialogvue_type_script_lang_js = (ChatWindowDialogvue_type_script_lang_js);
|
|
31241
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowDialog.vue?vue&type=style&index=0&id=
|
|
31253
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindowDialog.vue?vue&type=style&index=0&id=23a76780&prod&scoped=true&lang=css
|
|
31242
31254
|
// extracted by mini-css-extract-plugin
|
|
31243
31255
|
|
|
31244
|
-
;// ./components/ChatWindowDialog.vue?vue&type=style&index=0&id=
|
|
31256
|
+
;// ./components/ChatWindowDialog.vue?vue&type=style&index=0&id=23a76780&prod&scoped=true&lang=css
|
|
31245
31257
|
|
|
31246
31258
|
;// ./components/ChatWindowDialog.vue
|
|
31247
31259
|
|
|
@@ -31254,11 +31266,11 @@ var ChatInputBox_component = normalizeComponent(
|
|
|
31254
31266
|
|
|
31255
31267
|
var ChatWindowDialog_component = normalizeComponent(
|
|
31256
31268
|
components_ChatWindowDialogvue_type_script_lang_js,
|
|
31257
|
-
|
|
31258
|
-
|
|
31269
|
+
ChatWindowDialogvue_type_template_id_23a76780_scoped_true_render,
|
|
31270
|
+
ChatWindowDialogvue_type_template_id_23a76780_scoped_true_staticRenderFns,
|
|
31259
31271
|
false,
|
|
31260
31272
|
null,
|
|
31261
|
-
"
|
|
31273
|
+
"23a76780",
|
|
31262
31274
|
null
|
|
31263
31275
|
|
|
31264
31276
|
)
|
|
@@ -31285,7 +31297,9 @@ var es_typed_array_with = __webpack_require__(9577);
|
|
|
31285
31297
|
audioContext: null,
|
|
31286
31298
|
microphone: null,
|
|
31287
31299
|
processor: null,
|
|
31288
|
-
audioBuffer: new Float32Array(0)
|
|
31300
|
+
audioBuffer: new Float32Array(0),
|
|
31301
|
+
// 优化
|
|
31302
|
+
int16Buffer: null
|
|
31289
31303
|
};
|
|
31290
31304
|
},
|
|
31291
31305
|
methods: {
|
|
@@ -31304,8 +31318,14 @@ var es_typed_array_with = __webpack_require__(9577);
|
|
|
31304
31318
|
this.audioContext = new AudioContext({
|
|
31305
31319
|
sampleRate: this.SAMPLE_RATE
|
|
31306
31320
|
});
|
|
31321
|
+
|
|
31322
|
+
// 优化 处理 AudioContext 挂起
|
|
31323
|
+
if (this.audioContext.state === 'suspended') {
|
|
31324
|
+
await this.audioContext.resume();
|
|
31325
|
+
}
|
|
31307
31326
|
this.microphone = this.audioContext.createMediaStreamSource(stream);
|
|
31308
31327
|
this.processor = this.audioContext.createScriptProcessor(this.FRAME_SIZE, 1, 1);
|
|
31328
|
+
this.int16Buffer = new Int16Array(this.FRAME_SIZE);
|
|
31309
31329
|
this.processor.onaudioprocess = this.processAudio;
|
|
31310
31330
|
this.microphone.connect(this.processor);
|
|
31311
31331
|
this.processor.connect(this.audioContext.destination);
|
|
@@ -31320,17 +31340,19 @@ var es_typed_array_with = __webpack_require__(9577);
|
|
|
31320
31340
|
processAudio(event) {
|
|
31321
31341
|
if (!this.isRecording) return;
|
|
31322
31342
|
const inputData = event.inputBuffer.getChannelData(0);
|
|
31323
|
-
|
|
31324
|
-
|
|
31325
|
-
|
|
31326
|
-
this.audioBuffer = tempBuffer;
|
|
31327
|
-
while (this.audioBuffer.length >= this.FRAME_SIZE) {
|
|
31328
|
-
const frame = this.audioBuffer.slice(0, this.FRAME_SIZE);
|
|
31329
|
-
this.audioBuffer = this.audioBuffer.slice(this.FRAME_SIZE);
|
|
31330
|
-
const pcmData = this.floatTo16BitPCM(frame);
|
|
31331
|
-
if (this.ws && this.ws.readyState === this.ws.OPEN) {
|
|
31332
|
-
this.ws.send(pcmData);
|
|
31343
|
+
if (this.ws && this.ws.readyState === this.ws.OPEN) {
|
|
31344
|
+
if (inputData.length !== this.int16Buffer.length) {
|
|
31345
|
+
this.int16Buffer = new Int16Array(inputData.length);
|
|
31333
31346
|
}
|
|
31347
|
+
for (let i = 0; i < inputData.length; i++) {
|
|
31348
|
+
let s = inputData[i];
|
|
31349
|
+
// 简单的 clamp
|
|
31350
|
+
s = s < -1 ? -1 : s > 1 ? 1 : s;
|
|
31351
|
+
this.int16Buffer[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;
|
|
31352
|
+
}
|
|
31353
|
+
|
|
31354
|
+
// 4. 发送数据
|
|
31355
|
+
this.ws.send(this.int16Buffer.buffer);
|
|
31334
31356
|
}
|
|
31335
31357
|
},
|
|
31336
31358
|
floatTo16BitPCM(input) {
|
|
@@ -31392,7 +31414,7 @@ var es_typed_array_with = __webpack_require__(9577);
|
|
|
31392
31414
|
const baseUrl = window.location.protocol + '//' + window.location.hostname;
|
|
31393
31415
|
const chatPort = '3100';
|
|
31394
31416
|
console.log(baseUrl, chatPort);
|
|
31395
|
-
const API_URL =
|
|
31417
|
+
const API_URL = `${baseUrl}:${chatPort}/lingxiao-byt/api/v1/mcp/ask`;
|
|
31396
31418
|
const WS_URL = 'ws://192.168.8.9:9999/ai_model/ws/voice-stream';
|
|
31397
31419
|
const AUDIO_URL = '/minio/lingxiaoai/byt.mp3';
|
|
31398
31420
|
const TIME_JUMP_POINTS_URL = '/minio/lingxiaoai/timeJumpPoints.json';
|
|
@@ -31470,11 +31492,22 @@ const TIME_JUMP_POINTS_URL = '/minio/lingxiaoai/timeJumpPoints.json';
|
|
|
31470
31492
|
if (data.type === 'detection') {
|
|
31471
31493
|
console.log('检测到唤醒词');
|
|
31472
31494
|
this.avaterStatus = 'normal';
|
|
31495
|
+
|
|
31496
|
+
// 性能检测起点
|
|
31497
|
+
this.startTime = Date.now(); // <-- 新增计时器
|
|
31498
|
+
console.log(`[Timer] 指令发送开始计时: ${this.startTime}ms`);
|
|
31473
31499
|
} else if (data.type === 'Collecting') {
|
|
31474
31500
|
console.log('状态: 采集中');
|
|
31475
31501
|
this.avaterStatus = 'thinking';
|
|
31476
31502
|
} else if (data.type === 'command') {
|
|
31477
31503
|
console.log('状态: 处理中');
|
|
31504
|
+
|
|
31505
|
+
// 性能检测终点
|
|
31506
|
+
if (this.startTime) {
|
|
31507
|
+
const latency = Date.now() - this.startTime;
|
|
31508
|
+
console.log(`[Latency] 完整命令处理耗时: ${latency}ms`); // 记录端到端延迟
|
|
31509
|
+
this.startTime = null;
|
|
31510
|
+
}
|
|
31478
31511
|
this.analyzeAudioCommand(data.category);
|
|
31479
31512
|
} else {
|
|
31480
31513
|
console.log('状态: 其他');
|
|
@@ -31534,6 +31567,14 @@ class StreamParser {
|
|
|
31534
31567
|
if (this.options.debug) {
|
|
31535
31568
|
console.log('[StreamParser] 收到chunk:', chunk.substring(0, 100));
|
|
31536
31569
|
}
|
|
31570
|
+
if (!this.buffer.includes('data:') && !this.buffer.includes('\n\n')) {
|
|
31571
|
+
// 纯文本流,直接处理
|
|
31572
|
+
if (this.options.debug) {
|
|
31573
|
+
console.log('[StreamParser] 检测到纯文本流');
|
|
31574
|
+
}
|
|
31575
|
+
this.processPlainText(callback);
|
|
31576
|
+
return;
|
|
31577
|
+
}
|
|
31537
31578
|
|
|
31538
31579
|
// 尝试解析为 SSE 格式
|
|
31539
31580
|
if (this.buffer.includes('data:')) {
|
|
@@ -31776,10 +31817,29 @@ class StreamParser {
|
|
|
31776
31817
|
this.reset();
|
|
31777
31818
|
}
|
|
31778
31819
|
}
|
|
31820
|
+
;// ./components/utils/Cookie.js
|
|
31821
|
+
const setCookie = (name, value, days) => {
|
|
31822
|
+
const d = new Date();
|
|
31823
|
+
d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000);
|
|
31824
|
+
const expires = `expires=${d.toUTCString()}`;
|
|
31825
|
+
document.cookie = `${name}=${value}; ${expires}`;
|
|
31826
|
+
};
|
|
31827
|
+
const getCookie = cname => {
|
|
31828
|
+
const name = `${cname}=`;
|
|
31829
|
+
const ca = document.cookie.split(';');
|
|
31830
|
+
for (let i = 0; i < ca.length; i++) {
|
|
31831
|
+
let c = ca[i];
|
|
31832
|
+
while (c.charAt(0) === ' ') c = c.substring(1);
|
|
31833
|
+
if (c.indexOf(name) !== -1) return c.substring(name.length, c.length);
|
|
31834
|
+
}
|
|
31835
|
+
return '';
|
|
31836
|
+
};
|
|
31837
|
+
|
|
31779
31838
|
;// ./components/mixins/messageMixin.js
|
|
31780
31839
|
|
|
31781
31840
|
|
|
31782
31841
|
|
|
31842
|
+
|
|
31783
31843
|
/* harmony default export */ var messageMixin = ({
|
|
31784
31844
|
data() {
|
|
31785
31845
|
return {
|
|
@@ -31835,17 +31895,16 @@ class StreamParser {
|
|
|
31835
31895
|
this.streamParser.reset();
|
|
31836
31896
|
try {
|
|
31837
31897
|
const startTime = Date.now();
|
|
31838
|
-
const
|
|
31839
|
-
const token = `Bearer e298f087-85bc-48c2-afb9-7c69ffc911aa`;
|
|
31898
|
+
const token = getCookie('bonyear-access_token') || `e298f087-85bc-48c2-afb9-7c69ffc911aa`;
|
|
31840
31899
|
const response = await fetch(API_URL, {
|
|
31841
31900
|
method: 'POST',
|
|
31842
|
-
signal: controller.signal,
|
|
31843
31901
|
headers: {
|
|
31844
31902
|
'Content-Type': 'application/json',
|
|
31845
|
-
'Authorization': token
|
|
31903
|
+
'Authorization': `Bearer ${token}`
|
|
31846
31904
|
},
|
|
31847
31905
|
body: JSON.stringify({
|
|
31848
|
-
content: message
|
|
31906
|
+
content: message,
|
|
31907
|
+
chatId: this.chatId
|
|
31849
31908
|
})
|
|
31850
31909
|
});
|
|
31851
31910
|
if (!response.ok) {
|
|
@@ -31946,6 +32005,14 @@ class StreamParser {
|
|
|
31946
32005
|
}
|
|
31947
32006
|
}
|
|
31948
32007
|
});
|
|
32008
|
+
;// ./components/utils/Uuid.js
|
|
32009
|
+
function generateUuid() {
|
|
32010
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
32011
|
+
var r = Math.random() * 16 | 0,
|
|
32012
|
+
v = c === 'x' ? r : r & 0x3 | 0x8;
|
|
32013
|
+
return v.toString(16);
|
|
32014
|
+
});
|
|
32015
|
+
}
|
|
31949
32016
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindow.vue?vue&type=script&lang=js
|
|
31950
32017
|
|
|
31951
32018
|
|
|
@@ -31964,8 +32031,10 @@ class StreamParser {
|
|
|
31964
32031
|
|
|
31965
32032
|
|
|
31966
32033
|
|
|
32034
|
+
|
|
31967
32035
|
const SAMPLE_RATE = 16000;
|
|
31968
32036
|
const FRAME_SIZE = 512;
|
|
32037
|
+
const startTime = null;
|
|
31969
32038
|
/* harmony default export */ var ChatWindowvue_type_script_lang_js = ({
|
|
31970
32039
|
name: 'ChatWindow',
|
|
31971
32040
|
components: {
|
|
@@ -31982,6 +32051,7 @@ const FRAME_SIZE = 512;
|
|
|
31982
32051
|
},
|
|
31983
32052
|
data() {
|
|
31984
32053
|
return {
|
|
32054
|
+
chatId: generateUuid(),
|
|
31985
32055
|
audioSrc: AUDIO_URL,
|
|
31986
32056
|
inputMessage: '',
|
|
31987
32057
|
visible: false,
|
|
@@ -31993,6 +32063,8 @@ const FRAME_SIZE = 512;
|
|
|
31993
32063
|
jumpedTimePoints: new Set(),
|
|
31994
32064
|
SAMPLE_RATE,
|
|
31995
32065
|
FRAME_SIZE,
|
|
32066
|
+
startTime,
|
|
32067
|
+
// 检查性能使用
|
|
31996
32068
|
dragThreshold: 5,
|
|
31997
32069
|
// 拖拽阈值
|
|
31998
32070
|
isDragging: false,
|
|
@@ -32165,10 +32237,10 @@ const FRAME_SIZE = 512;
|
|
|
32165
32237
|
});
|
|
32166
32238
|
;// ./components/ChatWindow.vue?vue&type=script&lang=js
|
|
32167
32239
|
/* harmony default export */ var components_ChatWindowvue_type_script_lang_js = (ChatWindowvue_type_script_lang_js);
|
|
32168
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindow.vue?vue&type=style&index=0&id=
|
|
32240
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/ChatWindow.vue?vue&type=style&index=0&id=0e3e6d50&prod&scoped=true&lang=css
|
|
32169
32241
|
// extracted by mini-css-extract-plugin
|
|
32170
32242
|
|
|
32171
|
-
;// ./components/ChatWindow.vue?vue&type=style&index=0&id=
|
|
32243
|
+
;// ./components/ChatWindow.vue?vue&type=style&index=0&id=0e3e6d50&prod&scoped=true&lang=css
|
|
32172
32244
|
|
|
32173
32245
|
;// ./components/ChatWindow.vue
|
|
32174
32246
|
|
|
@@ -32185,7 +32257,7 @@ var ChatWindow_component = normalizeComponent(
|
|
|
32185
32257
|
staticRenderFns,
|
|
32186
32258
|
false,
|
|
32187
32259
|
null,
|
|
32188
|
-
"
|
|
32260
|
+
"0e3e6d50",
|
|
32189
32261
|
null
|
|
32190
32262
|
|
|
32191
32263
|
)
|