diff --git a/feeluown/gui/uimain/ai_chat.py b/feeluown/gui/uimain/ai_chat.py index 5296b2681..88367a55a 100644 --- a/feeluown/gui/uimain/ai_chat.py +++ b/feeluown/gui/uimain/ai_chat.py @@ -92,6 +92,7 @@ def __init__(self, app: 'GuiApp', parent=None): self._editor.setFrameShape(QFrame.NoFrame) self._scrollarea.setWidget(self._editor) self._msg_label = QLabel(self) + self._msg_label.setWordWrap(True) self._hide_btn = TextButton('关闭窗口', self) self._extract_and_play_btn = TextButton('提取歌曲并播放', self) self._extract_10_and_play_btn = TextButton('提取10首并播放', self) @@ -151,9 +152,9 @@ async def exec_user_query(self, query): messages=messages, stream=True, ) - except: # noqa - self._app.show_msg('OpenAI 接口调用失败') - logger.exception('OpenAI API request failed') + except Exception as e: # noqa + self.set_msg(f'调用 AI 接口失败: {e}', level='err') + logger.exception('AI request failed') else: content = '' async for chunk in stream: @@ -173,7 +174,7 @@ def set_msg(self, text, level='hint'): elif level == 'warn': color = 'yellow' else: # err - color = 'red' + color = 'magenta' self._msg_label.setText(f'{text}') async def extract_and_play(self): @@ -195,11 +196,16 @@ async def _extract_and_play(self, extract_prompt): message = {'role': 'user', 'content': extract_prompt} self._chat_context.messages.append(message) self.set_msg('正在让 AI 解析歌曲信息,这可能会花费一些时间...') - stream = await self._chat_context.client.chat.completions.create( - model=self._app.config.OPENAI_MODEL, - messages=self._chat_context.messages, - stream=True, - ) + try: + stream = await self._chat_context.client.chat.completions.create( + model=self._app.config.OPENAI_MODEL, + messages=self._chat_context.messages, + stream=True, + ) + except Exception as e: # noqa + self.set_msg(f'调用 AI 接口失败: {e}', level='err') + logger.exception('AI request failed') + return rr, rw, wtask = await a_handle_stream(stream) ok_count = 0 @@ -262,3 +268,4 @@ def hide(self): layout.addWidget(widget) widget.show() widget.body.show_chat_message('Hello, feeluown!' * 100) + widget.body.set_msg('error', level='err') diff --git a/feeluown/library/ai_standby.py b/feeluown/library/ai_standby.py index f03f01195..df183d6cf 100644 --- a/feeluown/library/ai_standby.py +++ b/feeluown/library/ai_standby.py @@ -58,7 +58,7 @@ async def match(self, song: 'BriefSongModel', standby_list: List['BriefSongModel stream=True, ) except: # noqa - logger.exception('OpenAI API request failed') + logger.exception('AI request failed') return [] rr, rw, wtask = await a_handle_stream(stream) diff --git a/feeluown/player/ai_radio.py b/feeluown/player/ai_radio.py index 693d508a2..fef1d573f 100644 --- a/feeluown/player/ai_radio.py +++ b/feeluown/player/ai_radio.py @@ -59,12 +59,10 @@ def fetch_songs_func(self, _): messages=self._messages, ) except AuthenticationError: - logger.exception('OpenAI authentication failed') - self._app.show_msg('OpenAI API key 验证失败') + logger.exception('AI authentication failed') return [] except Exception: - self._app.show_msg('OpenAI API 接口调用失败') - logger.exception('OpenAI request failed') + logger.exception('AI request failed') return [] msg = response.choices[0].message self._messages.append(msg) diff --git a/feeluown/player/fm.py b/feeluown/player/fm.py index 5f888e8e3..260ea43bb 100644 --- a/feeluown/player/fm.py +++ b/feeluown/player/fm.py @@ -115,6 +115,7 @@ def _on_songs_fetched(self, future): else: if len(songs) < self._minimum_per_fetch: logger.info('No enough songs, exit fm mode now') + self._app.show_msg('电台返回歌曲不足,退出 FM 模式') self.deactivate() else: self._feed_playlist(songs)