liumaolin commited on
Commit
ce3d9e5
·
1 Parent(s): 9965918

Refactor response generation logic in `generator.py`

Browse files

- Adjust sentence length evaluation for end mark conditions.
- Update chunk filtering to handle `<think>` and newline tags consistently.
- Fix inconsistency in sentence preprocessing with remaining content handling.
- Clean up unnecessary whitespace in method definitions.

src/voice_dialogue/services/text/generator.py CHANGED
@@ -97,13 +97,12 @@ class LLMResponseGenerator(BaseThread):
97
  # 普通句子的判断逻辑
98
  if is_chinese_sentence:
99
  sentence_words = len(sentence)
 
100
  else:
101
  sentence_words = len(sentence.split())
 
102
 
103
- return sentence_words > 4
104
-
105
- def _send_sentence_to_queue(self, voice_task: VoiceTask, sentence: str,
106
- answer_index: int) -> None:
107
  """将句子发送到队列"""
108
  voice_task.answer_index = answer_index
109
  voice_task.answer_sentence = sentence.strip()
@@ -149,9 +148,9 @@ class LLMResponseGenerator(BaseThread):
149
 
150
  try:
151
  for chunk in pipeline.stream(input={'input': user_question}, config=config):
152
- if not chunk.content.strip():
153
  continue
154
- elif chunk.content.strip() in {'<think>', '</think>'}:
155
  continue
156
 
157
  chunk_content = f'{chunk.content}'
@@ -161,6 +160,7 @@ class LLMResponseGenerator(BaseThread):
161
 
162
  sentence = preprocess_sentence_text(chunks)
163
  if not sentence:
 
164
  continue
165
 
166
  # 检查是否应该结束当前句子
@@ -192,9 +192,9 @@ class LLMResponseGenerator(BaseThread):
192
 
193
  def run(self):
194
  model_path = paths.LLM_MODELS_PATH / 'qwen' / 'Qwen3-8B-Q6_K.gguf'
195
-
196
  model_params = get_llm_model_params()
197
-
198
  # 打印芯片信息和优化配置
199
  chip_summary = get_apple_silicon_summary()
200
  print(f"检测到芯片: {chip_summary['chip_name']}")
@@ -202,7 +202,7 @@ class LLMResponseGenerator(BaseThread):
202
  print(f"使用线程数: {chip_summary['optimal_n_threads']} (仅使用性能核心)")
203
  print(f"上下文窗口: {chip_summary['optimal_n_ctx']}")
204
  print(f"配置说明: {chip_summary['config_note']}")
205
-
206
  self.model_instance = create_langchain_chat_llamacpp_instance(
207
  local_model_path=model_path, model_params=model_params
208
  )
 
97
  # 普通句子的判断逻辑
98
  if is_chinese_sentence:
99
  sentence_words = len(sentence)
100
+ return sentence_words > 4
101
  else:
102
  sentence_words = len(sentence.split())
103
+ return sentence_words > 4 or (sentence_words > 2 and sentence_end_mark in {'.', '?', '!', })
104
 
105
+ def _send_sentence_to_queue(self, voice_task: VoiceTask, sentence: str, answer_index: int) -> None:
 
 
 
106
  """将句子发送到队列"""
107
  voice_task.answer_index = answer_index
108
  voice_task.answer_sentence = sentence.strip()
 
148
 
149
  try:
150
  for chunk in pipeline.stream(input={'input': user_question}, config=config):
151
+ if not chunk.content:
152
  continue
153
+ elif chunk.content in {'<think>', '\n\n', '</think>'}:
154
  continue
155
 
156
  chunk_content = f'{chunk.content}'
 
160
 
161
  sentence = preprocess_sentence_text(chunks)
162
  if not sentence:
163
+ chunks.append(remain_content)
164
  continue
165
 
166
  # 检查是否应该结束当前句子
 
192
 
193
  def run(self):
194
  model_path = paths.LLM_MODELS_PATH / 'qwen' / 'Qwen3-8B-Q6_K.gguf'
195
+
196
  model_params = get_llm_model_params()
197
+
198
  # 打印芯片信息和优化配置
199
  chip_summary = get_apple_silicon_summary()
200
  print(f"检测到芯片: {chip_summary['chip_name']}")
 
202
  print(f"使用线程数: {chip_summary['optimal_n_threads']} (仅使用性能核心)")
203
  print(f"上下文窗口: {chip_summary['optimal_n_ctx']}")
204
  print(f"配置说明: {chip_summary['config_note']}")
205
+
206
  self.model_instance = create_langchain_chat_llamacpp_instance(
207
  local_model_path=model_path, model_params=model_params
208
  )