Skip to content

Commit f6d73e4

Browse files
committed
fix #153
1 parent 0dae4af commit f6d73e4

File tree

6 files changed

+92
-3
lines changed

6 files changed

+92
-3
lines changed

config/settings.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,13 @@
200200

201201
STATIC_URL = "static/"
202202
STATIC_ROOT = BASE_DIR / "static"
203+
STATICFILES_BACKEND = "whitenoise.storage.CompressedManifestStaticFilesStorage"
204+
if "test" in sys.argv:
205+
STATICFILES_BACKEND = "django.contrib.staticfiles.storage.StaticFilesStorage"
206+
203207
STORAGES = {
204208
"staticfiles": {
205-
"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
209+
"BACKEND": STATICFILES_BACKEND,
206210
},
207211
}
208212

core/models/agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ def translate(self, text: str, target_language: str, **kwargs) -> dict:
702702
time.sleep(self.interval)
703703
return {"text": self.translated_text, "tokens": 10, "characters": len(text)}
704704

705-
def summarize(self, text: str, target_language: str) -> dict:
705+
def summarize(self, text: str, target_language: str, **kwargs) -> dict:
706706
logger.info(">>> Test Summarize [%s]: %s", target_language, text)
707707
time.sleep(self.interval)
708708
return {"text": self.translated_text, "tokens": 10, "characters": len(text)}

core/tasks/summarize_feeds.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def summarize_feed(
109109
chunk_delimiter=chunk_delimiter,
110110
max_chunks_per_entry=max_chunks_per_entry,
111111
summary_detail=feed.summary_detail,
112+
user_prompt=feed.additional_prompt,
112113
)
113114

114115
entry.ai_summary = summary
@@ -163,6 +164,7 @@ def _summarize_entry(
163164
chunk_delimiter: str,
164165
max_chunks_per_entry: int,
165166
summary_detail: float,
167+
user_prompt: str = None,
166168
) -> tuple[str, int]:
167169
"""
168170
Summarize a single entry with memory optimizations.
@@ -210,6 +212,7 @@ def _summarize_entry(
210212
max_retries=3,
211213
text=text_chunks[0],
212214
target_language=target_language,
215+
user_prompt=user_prompt,
213216
)
214217
summary = response.get("text", "")
215218
tokens = response.get("tokens", 0)
@@ -249,6 +252,7 @@ def _summarize_entry(
249252
text=prompt,
250253
target_language=target_language,
251254
max_tokens=max_context_tokens,
255+
user_prompt=user_prompt,
252256
)
253257

254258
chunk_summary = response.get("text", "")

core/tasks/translate_feeds.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def translate_feed(feed: Feed, target_field: str = "title"):
8080
entry=entry,
8181
target_language=feed.target_language,
8282
engine=feed.translator,
83+
user_prompt=feed.additional_prompt,
8384
)
8485
total_tokens += metrics["tokens"]
8586
total_characters += metrics["characters"]
@@ -103,6 +104,7 @@ def translate_feed(feed: Feed, target_field: str = "title"):
103104
entry=entry,
104105
target_language=feed.target_language,
105106
engine=feed.translator,
107+
user_prompt=feed.additional_prompt,
106108
)
107109
total_tokens += metrics["tokens"]
108110
total_characters += metrics["characters"]
@@ -162,6 +164,7 @@ def _translate_entry_title(
162164
entry: Entry,
163165
target_language: str,
164166
engine: Agent,
167+
user_prompt: str = None,
165168
) -> dict:
166169
"""Translate entry title with memory optimization."""
167170
total_tokens = 0
@@ -178,6 +181,7 @@ def _translate_entry_title(
178181
text=entry.original_title,
179182
target_language=target_language,
180183
text_type="title",
184+
user_prompt=user_prompt,
181185
)
182186

183187
if result:
@@ -193,6 +197,7 @@ def _translate_entry_content(
193197
entry: Entry,
194198
target_language: str,
195199
engine: Agent,
200+
user_prompt: str = None,
196201
) -> dict:
197202
"""Translate entry content with memory optimization."""
198203
total_tokens = 0
@@ -230,6 +235,7 @@ def _translate_entry_content(
230235
text=processed_html,
231236
target_language=target_language,
232237
text_type="content",
238+
user_prompt=user_prompt,
233239
)
234240

235241
translated_content = result.get("text")

core/tests/test_tasks_consolidated.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,52 @@ def test_handle_feeds_translation_integration(self, mockauto_retry):
689689
self.feed.refresh_from_db()
690690
self.assertIsNotNone(self.feed.last_translate)
691691

692+
@patch("core.tasks.translate_feeds.auto_retry")
693+
def test_translate_feed_passes_additional_prompt_for_title(
694+
self, mockauto_retry
695+
):
696+
"""测试标题翻译会透传feed.additional_prompt"""
697+
self.feed.translator = self.agent
698+
self.feed.translate_title = True
699+
self.feed.additional_prompt = "Use glossary terms"
700+
self.feed.save()
701+
self._create_test_entry()
702+
703+
mockauto_retry.return_value = {
704+
"text": "Translated Title",
705+
"tokens": 10,
706+
"characters": 15,
707+
}
708+
709+
translate_feed(self.feed, target_field="title")
710+
711+
self.assertEqual(
712+
mockauto_retry.call_args.kwargs["user_prompt"], "Use glossary terms"
713+
)
714+
715+
@patch("core.tasks.translate_feeds.auto_retry")
716+
def test_translate_feed_passes_additional_prompt_for_content(
717+
self, mockauto_retry
718+
):
719+
"""测试正文翻译会透传feed.additional_prompt"""
720+
self.feed.translator = self.agent
721+
self.feed.translate_content = True
722+
self.feed.additional_prompt = "Preserve HTML structure"
723+
self.feed.save()
724+
self._create_test_entry(content="<p>Test content</p>")
725+
726+
mockauto_retry.return_value = {
727+
"text": "<p>Translated content</p>",
728+
"tokens": 20,
729+
"characters": 30,
730+
}
731+
732+
translate_feed(self.feed, target_field="content")
733+
734+
self.assertEqual(
735+
mockauto_retry.call_args.kwargs["user_prompt"], "Preserve HTML structure"
736+
)
737+
692738
@patch("core.tasks.fetch_feeds.handle_single_feed_fetch")
693739
def test_handle_feeds_summary(self, mock_handle_single):
694740
"""测试批量摘要处理 - 批量操作验证"""
@@ -719,6 +765,35 @@ def test_handle_feeds_summary(self, mock_handle_single):
719765
# 如果出现异常,这是预期的,因为测试环境可能缺少某些依赖
720766
self.fail(f"Unexpected exception: {e}")
721767

768+
@patch("core.tasks.summarize_feeds.auto_retry")
769+
@patch("core.tasks.summarize_feeds.text_handler.adaptive_chunking")
770+
@patch("core.tasks.summarize_feeds.text_handler.get_token_count")
771+
@patch("core.tasks.summarize_feeds.text_handler.clean_content")
772+
def test_summarize_feed_passes_additional_prompt(
773+
self,
774+
mock_clean_content,
775+
mock_get_token_count,
776+
mock_adaptive_chunking,
777+
mockauto_retry,
778+
):
779+
"""测试摘要会透传feed.additional_prompt"""
780+
self.feed.summarizer = self.agent
781+
self.feed.additional_prompt = "Keep blockchain terms in English"
782+
self.feed.save()
783+
self._create_test_entry(content="<p>Long content</p>")
784+
785+
mock_clean_content.return_value = "Long content"
786+
mock_get_token_count.return_value = 100
787+
mock_adaptive_chunking.return_value = ["Long content"]
788+
mockauto_retry.return_value = {"text": "Summary", "tokens": 12}
789+
790+
summarize_feed(self.feed)
791+
792+
self.assertEqual(
793+
mockauto_retry.call_args.kwargs["user_prompt"],
794+
"Keep blockchain terms in English",
795+
)
796+
722797
# ==================== Edge Cases and Error Handling ====================
723798

724799
def test_translate_title_with_empty_result(self):

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)