
    6ViO.                     H    S r SSKJrJrJr  SSKJr  SSKJr   " S S5      r	g)uI   
Prompt 编译服务

提供自动编译和存储 Prompt 模板的功能
    )DictAnyOptional)CategoryConfig)StagePromptGeneratorc                   \    \ rS rSrSr\S\S\4S j5       r\S\	S\	S\
S	\	S\	4
S
 j5       rSrg)PromptCompilerService   u   Prompt 编译服务categoryreturnc                     U R                  5       =(       d    0 nUR                  SS5      nSSSSS.n0 nU R                  5       nU(       Ga  UR                  5        GH  u  pgXe;  a  M  XV   nUR                  S/ 5      n	UR                  S	0 5      n
U	(       d  M>  U R                  US
SSSSU
R                  SS5      U
R                  SS5      U
R                  SSS/5      U
R                  SS5      S.n/ nUR                  5        H  u  pUR                  S	0 5      nUR                  SS5      nUR                  SS5      nUR                  S/ 5      nU(       a  SUS    SUS    S3OSnUR                  SU SU SU S U S!3	5        M     S"R                  U5      US#'   / nU	 H]  n0 UEnUR                  S$5      (       a/  US$   nUR                  S%5      (       a  US%   S&-   U-   US%'   OUUS%'   UR                  U5        M_     [        R                  " U R                  UUU(       a  UOS'S(9nU(       d  GM  UXG'   GM     GO U R                  5       n	U	(       d  g)U R                  5       nUR                  5        GH  u  pgS'nU H  nUR                  S*5      U:X  d  M  Un  O   U R                  US
SSSSS+.nU(       aV  UR                  SS5      US'   UR                  SS5      US,'   UR                  SSS/5      US'   UR                  SS5      US'   U(       a  / nU H  nUR                  S*S5      nUR                  SS5      nUR                  SS5      nUR                  S/ 5      nU(       a  SUS    SUS    S3OSnUR                  SU SU SU S U S!3	5        M     S"R                  U5      US#'   / nU	 GHc  n0 UEnUR                  S-5      (       a  UUS-   ;   a  US-   U   nUR                  S*5      (       a  US*   US*'   UR                  S.5      b  US.   US.'   UR                  S/5      (       a  US/   US0'   UR                  S5      (       a  US   US'   UR                  S%5      (       a  US%   US%'   UR                  S10 5      n[        U[        5      (       aj  UU;   ad  UU   nU(       aX  [        U[        5      (       aC  UR                  S2S5      nU(       a*  UR                  S%5      (       a  US%   S&-   U-   US%'   OUUS%'   UR                  U5        GMf     [        R                  " U R                  UUU(       a  UOS'S(9nU(       d  GM  UXG'   GM     U R                  U5        g3! [         aN  n SS'Kn!U!R#                  S4[%        U 5       35        SS'Kn"U!R#                  U"R)                  5       5         S'n A g)S'n A ff = f)5uw   编译并保存所有难度的 Prompt 模板

Args:
    category: CategoryConfig 实例
    
Returns:
    是否成功
system_prompt beginnereasymediumhard)u   入门u   简单u   中等u   困难stagesrules{{language}}{{knowledge_points}}	{{scene}}zPHP, Python, Node.js, Go, JavazDASCTF{...}writeup_count   	max_countdepth_rangeg      ?g      $@	diff_rateg333333?)r   
difficultylanguageknowledge_pointssceneavailable_languagesflag_formatr   max_knowledger   r   r   [,    ]z| z | u    个 | u    篇 | z |
difficulty_tablepromptuser_extensionz

N)category_idr   contextglobal_rulesFname)r   r   r   r    r!   r"   r#   r$   difficulty_configdescriptionoutput_formatoutputpromptscontentTu   编译 Prompt 失败: )get_advanced_configgetget_difficultiesitemsr0   appendjoinr   compile_full_promptid
get_stagesget_difficulty_rules
isinstancedictset_compiled_prompts	Exceptionloggingerrorstr	traceback
format_exc)#r   advancedr   difficulty_mapcompiled_promptsdifficultiesdifficulty_namedifficulty_keydiff_configr   r   r.   difficulty_table_rows	diff_namediff_cfg
diff_rulesr   r   r   	depth_strprocessed_stagesstage
stage_copyprompt_contentcompiled_promptdifficulty_rulesdifficulty_ruleruler0   merged_stagesr5   prompt_dataerE   rH   s#                                      W   /Users/yu22x/Desktop/ddd_副本125/ctf/app/services/category/prompt_compiler_service.pycompile_and_save_prompts.PromptCompilerService.compile_and_save_prompts   sD   w	335;H$LL"=M % " 	N  " $446L7E7K7K7M3O&: "."?K(__Xr:F'OOGR8E!  %-MM&5$2,B!,/O'4).?A)F).;)B',yyd'L%*YY{C%@G -/)/;/A/A/C+	%-\\'2%>
$.NN;$B	(2(J&0nn]B&GOZaA'7r+a.9I$K`b	-44r)C	{RYZgYhhopyozz|5}~ 0D 37))<Q2RG./ (*$!'%.Y
 !99X..-28_N)~~.>???IJZ?[^d?dgu?u
+; <?M
+; <(//
; "( ';&N&N$,KK/ '6C]	'O ';J(8} 8NB ",,. #+#@#@#B  8F7K7K7M3O&*O 088F+>.2O! !1 %-MM&5$2,B!,/O'4G '3B3F3FXY3Z03B3F3F{TU3V01@1D1D]UXZ^T_1`./>/B/B;PS/T, (02-$4D#'88FB#7D(,a(@I,0HH_a,HM*.((="*EKS^!KN+;2k!n=MQ(OdfI1882dV3ykQXYfXggnoxnyy{9|} %5 7;ii@U6V 23 %'M!'%.Y
 !99%899nPUViPj>j*/0C*D^*TK*v665@5H
6 2*}=I<G<V
= 9*??7B?7S
8 4*??>I/>Z
? ;*/?@@?JK[?\
+; < #())Ir":%gt44G9S*1/*BK*z+t/L/L1<B1O#1'1~~6F'G'GGQRbGcflGlo}G}
3C(DGU
3C(D%,,Z8; "(@ ';&N&N$,KK, '6C]	'O ';J(8a 8Nf ))*:; 	MM23q6(;<MM)..01	s3   H5U9 <"U9 A U9 #J6U9 U9 9
WAWWprompt_templater   vulnerabilitiesr!   c                    U nU(       a  [        U5      OSnUR                  SU5      n[        U[        5      (       a  SR	                  S U 5       5      nOU(       a  [        U5      OSnUR                  SU5      nUc  SnO][        U[
        5      (       a4  UR                  S5      (       a  [        UR                  SS5      5      OSnOU(       a  [        U5      OSnUR                  SU5      nU$ )u  替换 Prompt 模板中的占位符

Args:
    prompt_template: Prompt 模板（包含占位符）
    language: 编程语言
    vulnerabilities: 漏洞类型列表
    scene: 场景（可以是字符串、字典或None）
    
Returns:
    替换后的 Prompt
r   r   r&   c              3   8   #    U  H  n[        U5      v   M     g 7f)N)rG   ).0vs     ra   	<genexpr>=PromptCompilerService.replace_placeholders.<locals>.<genexpr>   s      AAQs   r   r0   r   )rG   replacerA   listr<   rB   r8   )rd   r   re   r!   r+   language_strvuln_str	scene_strs           ra   replace_placeholders*PromptCompilerService.replace_placeholders   s     ! )1s8}b= ot,,yy A AAH/>s?+BH 6A =It$$6;ii6G6GEIIfb12RI&+E
IY7     N)__name__
__module____qualname____firstlineno____doc__staticmethodr   boolrb   rG   rm   rq   __static_attributes__rt   rs   ra   r	   r	      sd    @> @d @ @D #c #S #SW #`c #hk # #rs   r	   N)
ry   typingr   r   r   app.models.database.modelsr   ,app.services.category.stage_prompt_generatorr   r	   rt   rs   ra   <module>r      s$   
 ' & 5 Mj jrs   