@@ -119,6 +119,37 @@ def _set_language(self, lang: str):
119119 def _is_en (self ) -> bool :
120120 return str (getattr (self , "lang" , "en" )).lower ().startswith ("en" )
121121
122+ def _normalize_target_length (self , target_length : Any , default : int = 5000 ) -> int :
123+ """Normalize free-form target-length input into a safe integer."""
124+ if isinstance (target_length , (int , float )):
125+ return max (1 , int (target_length ))
126+
127+ raw = str (target_length or "" ).strip ()
128+ if not raw :
129+ return default
130+
131+ try :
132+ return max (1 , int (raw ))
133+ except Exception :
134+ pass
135+
136+ digit_match = re .search (r"(\d{3,7})" , raw )
137+ if digit_match :
138+ try :
139+ return max (1 , int (digit_match .group (1 )))
140+ except Exception :
141+ pass
142+
143+ lower = raw .lower ()
144+ if any (token in raw for token in ["长篇" , "长文" , "超长" ]) or "long-form" in lower or "epic" in lower :
145+ return 20000
146+ if any (token in raw for token in ["中篇" , "中长" ]) or "medium" in lower :
147+ return 10000
148+ if any (token in raw for token in ["短篇" , "短文" ]) or "short" in lower :
149+ return 3000
150+
151+ return default
152+
122153 def _prompt (self , zh : str , en : str ) -> str :
123154 """Return prompt text based on current language selection."""
124155 return en if self ._is_en () else zh
@@ -371,6 +402,7 @@ def generate_long_text(
371402 print (self ._prompt (f" - 类型: { genre } " , f" - Genre: { genre } " ))
372403 print (self ._prompt (f" - 风格: { ', ' .join (style_tags )} " , f" - Style: { ', ' .join (style_tags )} " ))
373404 print (self ._prompt (f" - 主题: { topic } " , f" - Topic: { topic } " ))
405+ target_length = self ._normalize_target_length (target_length , default = 5000 )
374406 print (self ._prompt (f" - 目标长度: { target_length } 字" , f" - Target length: { target_length } words" ))
375407 else :
376408 # 如果没有自动分析,使用默认值
@@ -385,6 +417,8 @@ def generate_long_text(
385417 if not style_tags :
386418 style_tags = ["delicate" ] if self ._is_en () else ["细腻" ]
387419
420+ target_length = self ._normalize_target_length (target_length , default = 5000 )
421+
388422 self ._remember_project_claw_context (
389423 idea = idea ,
390424 topic = topic ,
@@ -400,7 +434,7 @@ def generate_long_text(
400434
401435 # 2. 任务分析 / Claw 自举
402436 if self ._claw_mode ():
403- complexity = "high" if int ( target_length or 0 ) >= 20000 else ("medium" if int ( target_length or 0 ) >= 8000 else "focused" )
437+ complexity = "high" if target_length >= 20000 else ("medium" if target_length >= 8000 else "focused" )
404438 task_analysis = {
405439 "complexity" : complexity ,
406440 "target_length" : target_length ,
0 commit comments