plan291037 commited on
Commit
a90044f
·
verified ·
1 Parent(s): ab84582

Update backend/server.py

Browse files
Files changed (1) hide show
  1. backend/server.py +15 -22
backend/server.py CHANGED
@@ -369,23 +369,18 @@ def _has_complete_marker_sequence(ai_text_full: str, expected_paras: int) -> boo
369
 
370
  def _build_ai_prompt_packet_custom(target_lang: str, original_text_full: str, prompt_editable: str, is_retry: bool = False) -> tuple[str, List[str]]:
371
  lang = _normalize_lang(target_lang)
372
- style_prompt = (prompt_editable or "").strip()
373
- if not style_prompt:
374
- style_prompt = (
375
- getattr(core, "ai_prompt_user_default",
376
- lambda _l, _m=None: "")(lang)
377
- or ""
378
- ).strip()
379
 
380
  base = (getattr(core, "AI_PROMPT_SYSTEM_BASE", "") or "").strip()
381
- style = (
382
- (getattr(core, "AI_LANG_STYLE", {}) or {}).get(lang)
383
- or (getattr(core, "AI_LANG_STYLE", {}) or {}).get("default")
384
- or ""
385
- ).strip()
 
 
 
386
 
387
  contract_parts: List[str] = [
388
- "Follow the user's StylePrompt as hard constraints (unless it would break marker rules).",
389
  "Output ONLY the translated text (no JSON, no markdown, no extra commentary).",
390
  "Markers: Keep every paragraph marker like <<TP_P0>> unchanged and in order. Do not remove, rename, or add markers.",
391
  "For each marker, output the marker followed by that paragraph's translated text.",
@@ -396,12 +391,10 @@ def _build_ai_prompt_packet_custom(target_lang: str, original_text_full: str, pr
396
  )
397
 
398
  system_text = "\n\n".join(
399
- [p for p in [base, style, "\n".join(contract_parts)] if p])
 
400
 
401
- user_parts: List[str] = []
402
- if style_prompt:
403
- user_parts.append("StylePrompt:\n" + style_prompt)
404
- user_parts.append("Input:\n" + str(original_text_full or ""))
405
  return system_text, user_parts
406
 
407
  def ai_translate_text(original_text_full: str, target_lang: str, ai: AiConfig, is_retry: bool = False) -> dict:
@@ -977,6 +970,7 @@ async def ai_resolve(payload: Dict[str, Any]):
977
  api_key = str(payload.get('api_key') or '').strip() or (
978
  os.getenv('AI_API_KEY') or '').strip()
979
  lang = _normalize_lang(str(payload.get('lang') or 'en'))
 
980
  if not api_key:
981
  return {
982
  'ok': False,
@@ -985,7 +979,7 @@ async def ai_resolve(payload: Dict[str, Any]):
985
  'default_model': '',
986
  'models': [],
987
  'lang': lang,
988
- 'prompt_editable_default': (getattr(core, 'ai_prompt_user_default', lambda _l: '')(lang) or '').strip(),
989
  }
990
 
991
  provider = core._canonical_provider(str(payload.get('provider') or 'auto'))
@@ -1076,8 +1070,7 @@ async def ai_resolve(payload: Dict[str, Any]):
1076
  if models and resolved_model not in models:
1077
  resolved_model = models[0]
1078
 
1079
- prompt_default = (getattr(core, 'ai_prompt_user_default',
1080
- lambda _l: '')(lang) or '').strip()
1081
 
1082
  return {
1083
  'ok': True,
@@ -1107,7 +1100,7 @@ async def ai_prompt_default(lang: str = 'en'):
1107
  return {
1108
  'ok': True,
1109
  'lang': l,
1110
- 'prompt_editable_default': (getattr(core, 'ai_prompt_user_default', lambda _l: '')(l) or '').strip(),
1111
  'lang_style': style,
1112
  'system_base': base,
1113
  'contract': contract,
 
369
 
370
  def _build_ai_prompt_packet_custom(target_lang: str, original_text_full: str, prompt_editable: str, is_retry: bool = False) -> tuple[str, List[str]]:
371
  lang = _normalize_lang(target_lang)
 
 
 
 
 
 
 
372
 
373
  base = (getattr(core, "AI_PROMPT_SYSTEM_BASE", "") or "").strip()
374
+
375
+ style = (prompt_editable or "").strip()
376
+ if not style:
377
+ style = (
378
+ (getattr(core, "AI_LANG_STYLE", {}) or {}).get(lang)
379
+ or (getattr(core, "AI_LANG_STYLE", {}) or {}).get("default")
380
+ or ""
381
+ ).strip()
382
 
383
  contract_parts: List[str] = [
 
384
  "Output ONLY the translated text (no JSON, no markdown, no extra commentary).",
385
  "Markers: Keep every paragraph marker like <<TP_P0>> unchanged and in order. Do not remove, rename, or add markers.",
386
  "For each marker, output the marker followed by that paragraph's translated text.",
 
391
  )
392
 
393
  system_text = "\n\n".join(
394
+ [p for p in [base, style, "\n".join(contract_parts)] if p]
395
+ )
396
 
397
+ user_parts: List[str] = ["Input:\n" + str(original_text_full or "")]
 
 
 
398
  return system_text, user_parts
399
 
400
  def ai_translate_text(original_text_full: str, target_lang: str, ai: AiConfig, is_retry: bool = False) -> dict:
 
970
  api_key = str(payload.get('api_key') or '').strip() or (
971
  os.getenv('AI_API_KEY') or '').strip()
972
  lang = _normalize_lang(str(payload.get('lang') or 'en'))
973
+ style_default = ((getattr(core, 'AI_LANG_STYLE', {}) or {}).get(lang) or (getattr(core, 'AI_LANG_STYLE', {}) or {}).get('default') or '').strip()
974
  if not api_key:
975
  return {
976
  'ok': False,
 
979
  'default_model': '',
980
  'models': [],
981
  'lang': lang,
982
+ 'prompt_editable_default': style_default,
983
  }
984
 
985
  provider = core._canonical_provider(str(payload.get('provider') or 'auto'))
 
1070
  if models and resolved_model not in models:
1071
  resolved_model = models[0]
1072
 
1073
+ prompt_default = style_default
 
1074
 
1075
  return {
1076
  'ok': True,
 
1100
  return {
1101
  'ok': True,
1102
  'lang': l,
1103
+ 'prompt_editable_default': style,
1104
  'lang_style': style,
1105
  'system_base': base,
1106
  'contract': contract,