diff --git a/bricks/audio.js b/bricks/audio.js index b5ef59f..aa9b6ca 100755 --- a/bricks/audio.js +++ b/bricks/audio.js @@ -38,6 +38,12 @@ bricks.AudioPlayer = class extends bricks.JsWidget { this.audio.src = url; bricks.debug(this.audio.src,' new src seted'); } + set_source_from_response(resp){ + // 将服务器返回的数据设置为音频源 + this.audio.src = URL.createObjectURL(new Blob([response.body])); + // 播放音频 + this.audio.play(); + } play(){ this.audio.play(); } diff --git a/bricks/build.sh b/bricks/build.sh index 5750208..d94486c 100755 --- a/bricks/build.sh +++ b/bricks/build.sh @@ -6,6 +6,7 @@ SOURCES=" page_data_loader.js factory.js uitypesdef.js utils.js uitype.js \ tree.js multiple_state_image.js dynamiccolumn.js form.js message.js conform.js \ paging.js datagrid.js iframe.js cols.js echartsext.js \ floaticonbar.js miniform.js wterm.js dynamicaccordion.js \ + binstreaming.js streaming_audio.js \ llm_dialog.js llm.js websocket.js datarow.js tabular.js \ line.js pie.js bar.js gobang.js " echo ${SOURCES} diff --git a/bricks/button.js b/bricks/button.js index ca86360..949b690 100644 --- a/bricks/button.js +++ b/bricks/button.js @@ -75,6 +75,7 @@ bricks.Button = class extends bricks.Layout { var txt = new bricks.Text(opts); this.add_widget(txt); txt.bind('click', this.target_clicked.bind(this)); + this.text_w = txt; } } target_clicked(event){ diff --git a/bricks/header.tmpl b/bricks/header.tmpl index bd0d336..d8701e3 100644 --- a/bricks/header.tmpl +++ b/bricks/header.tmpl @@ -7,9 +7,6 @@ - - - + + + diff --git a/bricks/llm.js b/bricks/llm.js index 4413ea1..0095bf3 100644 --- a/bricks/llm.js +++ b/bricks/llm.js @@ -1,5 +1,46 @@ bricks = window.bricks || {} +bricks.LlmMsgAudio = class extends bricks.UpStreaming { + constructor(opts){ + super(opts); + this.olddata = ''; + this.data = ''; + this.cn_p = ["。",",","!","?","\n"]; + this.other_p = [".",",","!","?","\n"]; + this.audio = AudioPlayer({}) + } + detectLanguage(text) { + try { + const detector = new Intl.LocaleDetector(); + const locale = detector.detectLocaleOf(text); + return locale.language; + } catch (error) { + console.error('无法检测语言:', error); + return '未知'; + } + } + send(data){ + var newdata = data.slice(this.olddata.length); + this.olddata = data; + this.data += newdata; + var lang = detectLaguage(this.data); + var parts; + if (lang='zh'){ + parts = this.data.split(this.cn_p).filter(part => part.trim()!== ''); + } else { + parts = this.data.split(this.oter_p).filter(part => part.trim()!== ''); + } + for(var i=0;i{ + if (this.textvoice){ + m.textvoice = true; + m.tts_url = this.tts_url; + } var lm = new bricks.LlmModel(this, m); this.llmmodels.push(lm); var tw = lm.render_title(); diff --git a/bricks/widget.js b/bricks/widget.js index 8d0983e..cae5872 100755 --- a/bricks/widget.js +++ b/bricks/widget.js @@ -309,7 +309,7 @@ bricks.TextBase = class extends bricks.JsWidget { if (this.i18n) { text = this._i18n._(this.otext); } else { - text = otext; + text = this.otext; } this.set_text(text); }