Files
rag_agent/RAG-TEST-TOOLS/__pycache__/graph_builder.cpython-313.pyc

181 lines
36 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00>[j<><6A><00><00><><00>SrSSKrSSKrSSKrSSKrSSKrSSKJr SSK J
r
SSK r SSK J r SSK Jr SSKJrJrJrJr SSKJrJrJrJrJrJrJrJrJrJrJr SS K J!r!J"r"J#r# SS
K$J%r%J&r&J'r' \ RP"\)5r*\"\+5r,\"\+5r-\"\+5r.S r/S r0S r1Sr2SSjr3"SS5r4Sr5Sr6Sr7Sr8SSjr9SSjr:Sr;g!\a SrN<>f=f!\a SrN<>f=f)uj
graph_builder.py - 知识图谱构建的核心流程控制器
包含完整的构建流程和交互逻辑
<EFBFBD>N)<01>datetime)<01>Path)<01>tqdm)<01> defaultdict)<04> GraphNode<64> GraphEdge<67>NodeType<70>EdgeType) <0B>parser<65>CPP_EXTENSIONS<4E> IGNORE_DIRS<52> safe_decode<64>extract_comment_before<72>extract_code_snippet<65>extract_full_function_name<6D>collect_call_expressions<6E>extract_class_name<6D>extract_member_function_name<6D>extract_base_classes)<03>generate_code_logic<69>generate_code_summary<72>get_qwen_embedding)<03> PROJECT_ROOT<4F>MAX_CODE_LENGTH<54>QWEN_EMBEDDING_MODELc<00>@<00>[US5(a UR$U$)N<>value)<02>hasattrr)rs <20>RAG-TEST-TOOLS\graph_builder.py<70> _as_node_typer (s<00><00>!<21>%<25><17>1<>1<>5<EFBFBD>;<3B>;<3B><<3C>u<EFBFBD><<3C>c<00>X<00>Uc [S5$[U5nURSSS9 U$)N<>.T)<02>parents<74>exist_ok)r<00>mkdir)<02>
output_dir<EFBFBD>paths r<00>_normalize_output_dirr),s1<00><00><11><19><13>C<EFBFBD>y<EFBFBD><18> <0F>
<EFBFBD> <1B>D<EFBFBD><08>J<EFBFBD>J<EFBFBD>t<EFBFBD>d<EFBFBD>J<EFBFBD>+<2B> <0F>Kr!c<00><><00>URRS5(aUR[S5S$UR$)N<> Function:)<04>id<69>
startswith<EFBFBD>len<65>name)<01>nodes r<00>_qualified_namer14s8<00><00> <0B>w<EFBFBD>w<EFBFBD><19><19>+<2B>&<26>&<26><13>w<EFBFBD>w<EFBFBD>s<EFBFBD>;<3B>'<27>(<28>)<29>)<29> <0F>9<EFBFBD>9<EFBFBD>r!c<00>d<00>U(dg[SU55$![[4a gf=f)NFc3<00>P# <00>UHn[[U55S:<3A>v<00> M g7f)g<11>-<2D><><EFBFBD>q=N)<02>abs<62>float)<02>.0rs r<00> <genexpr><3E>&_has_real_embedding.<locals>.<genexpr>>s<00><00><00>D<>)<29><15>3<EFBFBD>u<EFBFBD>U<EFBFBD>|<7C>$<24>u<EFBFBD>,<2C>)<29>s<00>$&)<03>any<6E> TypeError<6F>
ValueError)<01> embeddings r<00>_has_real_embeddingr=:s5<00><00> <14><14><15><12>D<>)<29>D<>D<>D<><44> <15>z<EFBFBD> "<22><15><14><15>s <00><00>/<03>/c<00>8<00>UR=(d 0nURS5nUc[UR5n0SUR_SUR
_SUR
_SURS5=(d [ U5_SUR_SUR_SUR_S UR_S
UR_S UR=(d S _S UR=(d S _SURSS 5_SURS/5_SURS/5_SURS/5_S[_SU=(d( UR(a[UR5OS_[U5URSS 5S.E$)N<>embedding_available<6C>node_idr/<00> function_name<6D>qualified_name<6D>file<6C> file_path<74>
start_line<EFBFBD>end_line<6E> signature<72>summary<72><00>
logic_flow<EFBFBD> code_snippet<65>calls<6C> called_by<62>includes<65>embedding_model<65> embedding_dimr<00>embedding_error)r?rQ)<10>raw_attributes<65>getr=r<r,r/r1rDrErFrGrHrJrr.<00>bool)r0rP<00>rawr?s r<00>_function_metadatarVCs<><00><00>
<0E>
<1D>
<1D>
#<23><12>C<EFBFBD><1D>'<27>'<27>"7<>8<><17><1A>"<22>1<>$<24>.<2E>.<2E>A<><1B> <06><11>4<EFBFBD>7<EFBFBD>7<EFBFBD> <06><0E><04> <09> <09> <06> <18><14><19><19> <06> <19>#<23>'<27>'<27>"2<>3<>L<><EFBFBD>t<EFBFBD>7L<37>  <06>
<0F><04><0E><0E>  <06> <14>T<EFBFBD>^<5E>^<5E>  <06> <15>d<EFBFBD>o<EFBFBD>o<EFBFBD> <06> <13>D<EFBFBD>M<EFBFBD>M<EFBFBD> <06> <14>T<EFBFBD>^<5E>^<5E> <06> <12>4<EFBFBD><<3C><<3C>%<25>2<EFBFBD> <06> <15>d<EFBFBD>o<EFBFBD>o<EFBFBD>+<2B><12> <06> <17><03><07><07><0E><02>3<> <06> <10><13><17><17><17>"<22>%<25> <06> <14>S<EFBFBD>W<EFBFBD>W<EFBFBD>[<5B>"<22>-<2D> <06> <13>C<EFBFBD>G<EFBFBD>G<EFBFBD>J<EFBFBD><02>+<2B> <06> <1A>/<2F>! <06>" <18><1D>X<>$<24>.<2E>.<2E>3<EFBFBD>t<EFBFBD>~<7E>~<7E>+><3E>VW<56># <06>$ $<24>$7<>8<><1E>7<EFBFBD>7<EFBFBD>#4<>b<EFBFBD>9<>' <06>r!c<00>B<00>\rSrSrSrSrS\4SjrS\S\ S\4S jr
S
r g ) <0C>SymbolResolver<65>_u8符号解析器将代码符号映射为图谱节点IDc<00>:<00>0Ul[[5Ulg<00>N)<04> _symbol_tabler<00>list<73>_file_to_entities)<01>selfs r<00>__init__<5F>SymbolResolver.__init__bs<00><00><1F><04><1A>!,<2C>T<EFBFBD>!2<><04>r!r0c<00><><00>URURUR'UR(a3URURR UR5 gg)u$注册新发现的实体到符号表N)r,r\r/rDr^<00>append)r_r0s r<00>register_entity<74>SymbolResolver.register_entityfsG<00><00>(,<2C><07><07><04><1A><1A>4<EFBFBD>9<EFBFBD>9<EFBFBD>%<25> <0F>><3E>><3E> <10> "<22> "<22>4<EFBFBD>><3E>><3E> 2<> 9<> 9<>$<24>'<27>'<27> B<> r!r/<00>current_context<78>returnc<00><><00>XR;aURU$URR5H'up4URSU-5(dX1:XdM%Us $ g)u<>
解析代码中的名称到节点ID
:param name: 代码中的名称
:param current_context: 当前上下文(文件、类等)
:return: 节点ID或None
<EFBFBD>::N)r\<00>items<6D>endswith)r_r/rfrBr@s r<00> resolve_name<6D>SymbolResolver.resolve_namelsb<00><00> <10>%<25>%<25> %<25><17>%<25>%<25>d<EFBFBD>+<2B> +<2B>'+<2B>'9<>'9<>'?<3F>'?<3F>'A<> #<23>N<EFBFBD><1D>&<26>&<26>t<EFBFBD>d<EFBFBD>{<7B>3<>3<>~<7E>7M<37><1E><0E>(B<01>r!)r^r\N) <0C>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__r`rrd<00>str<74>dictrl<00>__static_attributes__<5F>r!rrXrX_s2<00><00>B<>3<>C<01>I<EFBFBD>C<01> <14><13><14>t<EFBFBD><14><03>r!rXc<00><> ^'<27>[RSU35 [US5nUR5nSSS5 WR S5n[
R "U5nSU3n [U [R[U5RUS9n
URU
5 URU
5 /n URRHjn U R S:XdMU R#S5n U (dM/U R$R'S 5R)S
5nU RU5 Ml U [*U'URRGH<>n U R S :XGa<[-U 5nUS :Xa([R/S U R$SSS35 MNSU3n[U[R0UU R$R'S SS9R S5SR)5S-UU R2SS-U R4SS-SS 0S9nURU5 URU5 [7X<>5n[9X<>U5nU UUUUS.UU'UR[;U U[<R>S95 [AU 5nU[BU'GMQU R S;dGMd[EU 5nU(aUS :Xa[RGS5 GM<>SU3n[U[RHUU R$R'S SS9R S5SR)5S-UU R2SS-U R4SS-U R U R S:HS.S9nURU5 URU5 UR[;U U[<R>S95 U R#S 5nU(a<>[KU5nUH<>nURMS!5nURMS"S#5nUS$;a[<RNO[<RPnU(dMUURSUUUS%.5nU(dMsUR[;UUUS"U0S&95 M<> U RGH]nUR S :XdM[UUU5n U (aU S :XaM1SUS'U 3m'[WU'4S(jU5S5n!U!(d<>[T'[R0U UR$R'S SS9R S5SR)5S-UUR2SS-UR4SS-S)US*S+.S9n"URU"5 URU"5 [7UU5n#[9UUU5n$UU#U$UUS.UT''[AU5n%U%[BUS'U 3'UR[;UT'[<R>S,S-0S&95 GM` GM<> g!,(df  GN<>=f![Xa n&[R[S.US/U&3S)S09 eSn&A&ff=f)1u;处理单个C/C++文件提取代码实体和结构关系u处理单个文件: <20>rbN<62>
zFile:)r,<00>typer/rD<00>preproc_includer(<00>utf-8z"<><3E>function_definitionz <unknown>u* 跳过无法解析函数名的节点: <20>2z...r+<00>ignore)<01>errors<72>{rz {...}<7D><00> ast_node_type)r,rzr/rGrDrErFrR)<05>ast_node<64>commentrK<00> source_lines<65>tree<65><03> source_id<69> target_idrz)<02>class_specifier<65>struct_specifieru% 跳过无法解析类名的节点zClass:r<>)<02>ast_type<70> is_struct<63> base_clauser/<00>access<73>public)r<><00> protected<65>private)<02> current_file<6C> current_class)r<>r<>rz<00>
propertiesric3<00>J># <00>UHoRT:XdMUv<00> M g7fr[<00>r,)r6<00>n<>member_node_ids <20>rr7<00>&process_single_file.<locals>.<genexpr> s<00><><00><00>4d<34> <09>1<EFBFBD>T<EFBFBD>T<EFBFBD>Uc<55>Mc<4D>Q<EFBFBD>Q<EFBFBD> <09>s<00>#<01> #T<>member_function_definition)<03> is_member<65> parent_classr<73><00> member_type<70>methodu 解析文件 u 失败: )<01>exc_info).<2E>logger<65>info<66>open<65>read<61>splitr <00>parserr <00>FILErr/rcrd<00> root_node<64>named_childrenrz<00>child_by_field_name<6D>text<78>decode<64>strip<69>FILE_DEPENDENCIESr<00>warning<6E>FUNCTION<4F> start_point<6E> end_pointrrrr
<00>CONTAINSr<00>FUNCTION_CALL_GRAPHr<00>debug<75>CLASSrrS<00>EXTENDS<44>
IMPLEMENTSrlr<00>next<78> Exception<6F>error)(rD<00> all_nodes<65> all_edges<65>symbol_resolver<65>function_raw_info_map<61>f<> source_bytesr<73>r<><00> file_node_id<69> file_noderNr0<00> path_node<64> include_text<78> func_name<6D> func_node_id<69> func_noder<65>rK<00>callees<65>
class_name<EFBFBD> class_node_id<69>
class_noder<EFBFBD><00> base_classes<65>base_class_info<66> base_name<6D> access_type<70> edge_type<70>base_id<69>member<65>member_func_name<6D>existing_member_node<64> member_node<64>member_comment<6E> member_code<64>member_callees<65>er<65>s( @r<00>process_single_filer<65>}sB<00><><00>
<EFBFBD>K<EFBFBD>K<EFBFBD>&<26>y<EFBFBD>k<EFBFBD>2<>3<>u<0E> <11>)<29>T<EFBFBD> "<22>a<EFBFBD><1C>6<EFBFBD>6<EFBFBD>8<EFBFBD>L<EFBFBD>#<23>#<23>)<29>)<29>%<25>0<> <0C><15>|<7C>|<7C>L<EFBFBD>)<29><04><1F>y<EFBFBD>k<EFBFBD>*<2A> <0C><1D><1B><19><1D><1D><15>i<EFBFBD><1F>%<25>%<25><1F> 
<EFBFBD> <09> <12><18><18><19>#<23><17>'<27>'<27> <09>2<><16><08><18>N<EFBFBD>N<EFBFBD>1<>1<>D<EFBFBD><13>y<EFBFBD>y<EFBFBD>-<2D>-<2D> <20>4<>4<>V<EFBFBD><<3C> <09><1C>9<EFBFBD>#,<2C>><3E>><3E>#8<>#8<><17>#A<>#G<>#G<><05>#N<>L<EFBFBD><1C>O<EFBFBD>O<EFBFBD>L<EFBFBD>1<> 2<> (0<><19>)<29>$<24><19>N<EFBFBD>N<EFBFBD>1<>1<>D<EFBFBD><13>y<EFBFBD>y<EFBFBD>1<>1<>6<>t<EFBFBD><<3C> <09><1C> <0B>+<2B><1A>N<EFBFBD>N<EFBFBD>%O<>PT<50>PY<50>PY<50>Z]<5D>[]<5D>P^<5E>O_<4F>_b<5F>#c<>d<><1C>"+<2B>9<EFBFBD>+<2B>6<> <0C>%<25>#<23>!<21>*<2A>*<2A>"<22>"<22>i<EFBFBD>i<EFBFBD>.<2E>.<2E>w<EFBFBD>x<EFBFBD>.<2E>H<>N<>N<>s<EFBFBD>S<>TU<54>V<>\<5C>\<5C>^<5E>ai<61>i<>'<27>#<23>/<2F>/<2F><01>2<>Q<EFBFBD>6<>!<21>^<5E>^<5E>A<EFBFBD>.<2E><11>2<>$3<>5J<35>#K<> <12> <09><1A> <20> <20><19>+<2B><1F>/<2F>/<2F> <09>:<3A>1<><14>D<><07>3<>D<EFBFBD> <0C>M<> <0C> $<24>&<26>$0<>$0<> <20> 7<12>%<25>l<EFBFBD>3<><1A> <20> <20><19>*<2A>*<2A>!<21>*<2A>*<2A>"<12><13>3<>4<EFBFBD>8<><07>18<31>#<23>I<EFBFBD>.<2E><16><19><19>E<>E<>/<2F><04>5<>
<EFBFBD>!<21>Z<EFBFBD>;<3B>%><3E><1A>L<EFBFBD>L<EFBFBD>#H<>J<><1C>#)<29><1A> <0C> 5<> <0A>&<26>$<24>!<21><1E><1E>#<23>"<22>i<EFBFBD>i<EFBFBD>.<2E>.<2E>w<EFBFBD>x<EFBFBD>.<2E>H<>N<>N<>s<EFBFBD>S<>TU<54>V<>\<5C>\<5C>^<5E>ai<61>i<>'<27>#<23>/<2F>/<2F><01>2<>Q<EFBFBD>6<>!<21>^<5E>^<5E>A<EFBFBD>.<2E><11>2<>$(<28>I<EFBFBD>I<EFBFBD>%)<29>Y<EFBFBD>Y<EFBFBD>2D<32>%D<>$<16> <12>
<EFBFBD><1A> <20> <20><1A>,<2C><1F>/<2F>/<2F>
<EFBFBD>;<3B><1A> <20> <20><19>*<2A>+<2B>!<21>*<2A>*<2A>"<12><13>#<23>6<>6<>}<7D>E<> <0B><1E>#7<> <0B>#D<>L<EFBFBD>+7<><0F>$3<>$7<>$7<><06>$?<3F> <09>&5<>&9<>&9<>(<28>H<EFBFBD>&M<> <0B>8C<38>HS<01>9S<01>H<EFBFBD>$4<>$4<>X`<60>Xk<58>Xk<58>"<22>%<25>9<EFBFBD>&5<>&B<>&B<> )<29>1:<3A>Z<EFBFBD> X<>'<1E>G<EFBFBD> '<27>w<EFBFBD> )<29> 0<> 0<><19>.;<3B>.5<EFBFBD>)2<>08<30>+<2B>/F<> 2"<22>!#<23>,8<>(#<23>1<>1<>F<EFBFBD><1D>{<7B>{<7B>&;<3B>;<3B>+G<><06>PZ<50>+[<5B>(<28>/<2F>3C<33>{<7B>3R<33>$<24>+4<>Z<EFBFBD>L<EFBFBD><02>CS<43>BT<42>)U<><0E>/3<>4d<34> <09>4d<34>fj<66>/k<>,<2C>3<>*3<>#1<>%-<2D>%6<>%6<>%5<>*0<>+<2B>+<2B>*<<3C>*<<3C>W<EFBFBD>X<EFBFBD>*<<3C>*V<>*\<5C>*\<5C>]`<60>*a<>bc<62>*d<>*j<>*j<>*l<>ow<6F>*w<>*3<>+1<>+=<3D>+=<3D>a<EFBFBD>+@<40>1<EFBFBD>+D<>)/<2F>)9<>)9<>!<21>)<<3C>q<EFBFBD>)@<40>15<31>4><3E>5Q<35>0"<22> +<1E>K<EFBFBD>&<26>,<2C>,<2C>[<5B>9<>+<2B>;<3B>;<3B>K<EFBFBD>H<>.D<01>F<EFBFBD>L<EFBFBD>-Y<>N<EFBFBD>*><3E>t<EFBFBD>V<EFBFBD>\<5C>*Z<>K<EFBFBD>,2<>+9<>0;<3B>0<<3C>(,<2C> E<1E>1<>.<2E>A<>.F<01>f<EFBFBD>-M<>N<EFBFBD>We<57>/<2F>:<3A>,<2C>b<EFBFBD>AQ<41>@R<>0S<30>T<>"<22>(<28>(<28><19>&3<>&4<>!)<29>!2<>!2<>(5<>x<EFBFBD>'@<40> *<1A><1B>W2<>K2<>7#<23> "<22><>d <15><0E><0E> <0C> <0C>}<7D>Y<EFBFBD>K<EFBFBD>y<EFBFBD><11><03><<3C>t<EFBFBD> <0C>L<> <0A><><0E>sU<00> X<00>X<03>B,X<00>(X<00>F=X<00>FX<00>X<00>.?X<00>1EX<00>
X<07> X<00>
X?<03>X:<03>:X?c <00><><00>[RSU35 [R"U5H<>upVnUVs/sHo<>[;dMUPM snUSS&UH^n [ U 5n
U
R R5[;aM2[RRXY5n [X<>X#U5 M` M<> [W5$s snf)u处理整个项目目录u处理项目目录: N) r<>r<><00>os<6F>walkr r<00>suffix<69>lowerr r(<00>joinr<6E>r.) <0C> project_rootr<74>r<>r<>r<><00>root<6F>dirs<72>files<65>drC<00> file_path_obj<62>full_file_paths r<00>process_project_filesr<73>9s<><00><00>
<EFBFBD>K<EFBFBD>K<EFBFBD>&<26>|<7C>n<EFBFBD>5<>6<><1F>W<EFBFBD>W<EFBFBD>\<5C>2<><19><04>E<EFBFBD>"<22>;<3B>d<EFBFBD><11>{<7B>&:<3A>1<EFBFBD>d<EFBFBD>;<3B><04>Q<EFBFBD><07><19>D<EFBFBD> <20><14>J<EFBFBD>M<EFBFBD><1C>#<23>#<23>)<29>)<29>+<2B>><3E>A<><18><1F>W<EFBFBD>W<EFBFBD>\<5C>\<5C>$<24>5<>N<EFBFBD> <1F><0E>9<EFBFBD>Wl<57> m<> <1A> 3<> <0F>u<EFBFBD>:<3A><15><><s <00> C <06>
C c <00><> <00>[RS5 UVs/sH$o3R[R:XdM"UPM& nn/n/nUH7nUR
U;aUR U5 M&UR U5 M9 [RS[U5S35 U(a"[RS[U5S35 U(Ga*[S[U5S35 [S5 Sn[US S
S 9GH<>nUR
n URn
X)n U S n U S n URnURRU U [R!U/5[#U5S.5 [%X<>X<EFBFBD>5n[+X<>X<EFBFBD>U5nUUlX<>l[0R!U
/5n[2R!U
/5nURRUU[R!U/5S.5 SU
SUSUS[4R6R9U53n[;U5n[=US5(aUR?5O
[AU5n[CU5(d [ES5eUUl#SURS'SURS'US%- nUS&-S:Xa[S'US([U5S)35 [JRL"S*5 GM<> [S+[U5S,35 O[RS-5 U(a<>[S.[U5S/35 UH<>nS0URS1UR3UlS2UlS!/S"-Ul#URR[0R!UR/5[2R!UR/5[R!UR/5[#U5S#S3S4.5 M<> ggs snf![&a(n[R)SU
SU35 SnSnAGN<>SnAff=f![&a(n[R)SU
SU35 SnSnAGN<>SnAff=f![&a[n[R)SU
S U35 S!/S"-Ul#S#URS'[IU5SS$URS'SnAGN#SnAff=f)5uE阶段三语义增强为函数节点生成摘要与向量嵌入uH阶段三:语义增强,为函数节点生成摘要与向量嵌入...u有原始信息的节点: u 个u无原始信息的节点: u
开始为 u" 个函数生成摘要和向量...u0这可能需要一些时间,请耐心等待...ru生成函数摘要u个)<02>desc<73>unitr<74>rK)r<>rKrNrBu
为函数 u 生成逻辑失败: u逻辑生成失败。Nu 生成摘要失败: u摘要生成失败。)rLrMrNu 函数名: u
功能摘要: u
流程逻辑: u
所在文件: <20>tolistz/Embedding API returned an empty or zero vector.Tr?rIrQu 生成嵌入失败: <20><00>Fi<46>r<><00>u 已处理 <20>/u
个函数g<E695B0><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?u ✓ 完成 u 个函数的语义增强uH没有找到任何有原始信息的函数节点跳过摘要生成。u
为 u1 个无原始信息的节点生成基础信息...<2E>函数 <20>
,位于 u6无法生成逻辑流程缺少原始代码信息zMissing source information.)rLrMrNrBr?rQ)'r<>r<>rzr r<>r,rcr.r<><00>printrr/rDrR<00>updater<65>rSr1rr<>r<>rrHrJr<><00>CALLED_BY_GRAPHr<48>r(<00>basenamerrr<>r]r=<00> RuntimeErrorr<rs<00>time<6D>sleep)r<>r<>r<>r<><00>function_nodes<65>nodes_with_raw_info<66>nodes_without_raw_infor<6F><00>processed_countr<74>r<><00>raw_infor<6F>rKrD<00>logicr<63>rH<00>called_functions<6E>caller_functions<6E>context_text_for_embedding<6E>embedding_vector<6F>embedding_valuess r<00>semantic_enhancementrLs<><00><00>
<EFBFBD>K<EFBFBD>K<EFBFBD>Z<>[<5B>"+<2B>J<><19>A<EFBFBD>f<EFBFBD>f<EFBFBD><08>8I<38>8I<38>.I<>a<EFBFBD><19>N<EFBFBD>J<><1C><17><1F><1A>#<23> <09> <14><<3C><<3C>0<> 0<> <1F> &<26> &<26>y<EFBFBD> 1<> "<22> )<29> )<29>)<29> 4<> $<24>  <0B>K<EFBFBD>K<EFBFBD>,<2C>S<EFBFBD>1D<31>-E<>,F<>d<EFBFBD>K<>L<><1D><0E><0E><0E>3<>C<EFBFBD>8N<38>4O<34>3P<33>PT<50>U<>V<><1B> <0A> <0C>S<EFBFBD>!4<>5<>6<>6X<36>Y<>Z<> <0A>@<40>A<><1B><0F><1D>1<>8L<38>SX<53>Y<>I<EFBFBD>$<24><<3C><<3C>L<EFBFBD>!<21><0E><0E>I<EFBFBD>-<2D>:<3A>H<EFBFBD><1E>y<EFBFBD>)<29>G<EFBFBD>#<23>N<EFBFBD>3<>L<EFBFBD>!<21>+<2B>+<2B>I<EFBFBD> <15> $<24> $<24> +<2B> +<2B>"<22> ,<2C>-<2D>1<>1<>)<29>R<EFBFBD>@<40>"1<>)<29>"<<3C> -<0E> <0F> 0<>+<2B>I<EFBFBD> <0C>X<><05>  2<>/<2F><1D><05>Y<EFBFBD><12><07>!(<28>I<EFBFBD> <1D>#(<28> <20> 3<>6<>6<>y<EFBFBD>"<22>E<> <1C>.<2E>2<>2<>9<EFBFBD>b<EFBFBD>A<> <1C> <15> $<24> $<24> +<2B> +<2B>)<29>-<2D>-<2D>1<>1<>)<29>R<EFBFBD>@<40>-<0E> <0F><1E>i<EFBFBD>[<5B>)!<21>!(<28> <09>*!<21>!&<26><07>(!<21>!#<23><17><17>!1<>!1<>)<29>!<<3C> =<3D>?<3F> '<27> K<01>#5<>6P<36>#Q<> <20><1F>/<2F><18>:<3A>:<3A>%<25>+<2B>+<2B>-<2D><1D>.<2E>/<2F>!<21>
+<2B>+;<3B><<3C><<3C>&<26>'X<>Y<>Y<>&6<> <09>#<23>BF<42> <09>(<28>(<28>)><3E>?<3F>>@<40> <09>(<28>(<28>):<3A>;<3B> <1C>q<EFBFBD> <20>O<EFBFBD><1E><11>"<22>a<EFBFBD>'<27><15> <0C>_<EFBFBD>$5<>Q<EFBFBD>s<EFBFBD>;N<>7O<37>6P<36>PZ<50>[<5B>\<5C> <11>J<EFBFBD>J<EFBFBD>s<EFBFBD>O<EFBFBD>[Z<01>^ <0E> <0B>C<EFBFBD> 3<>4<>5<>5N<35>O<>P<><0E><0E><0E>a<>b<><1E> <0A><06>s<EFBFBD>1<>2<>3<>3d<33>e<>f<>/<2F>I<EFBFBD>")<29>)<29>.<2E>.<2E>)9<><1A>I<EFBFBD>DW<44>DW<44>CX<43> Y<>I<EFBFBD> <1D>#[<5B>I<EFBFBD> <20>#&<26>%<25>$<24>,<2C>I<EFBFBD> <1F> <15> $<24> $<24> +<2B> +<2B>,<2C>0<>0<><19><1E><1E><12>D<>,<2C>0<>0<><19><1E><1E><12>D<>-<2D>1<>1<>)<29>2E<32>2E<32>r<EFBFBD>J<>"1<>)<29>"<<3C>',<2C>#@<40> -<0E> <0F> 0<><1E><>QK<01><>N<1D> 0<><16> <0C> <0C>z<EFBFBD>)<29><1B>4I<34>!<21><13>M<>N<>/<2F><05><> 0<><30><1D> 2<><16> <0C> <0C>z<EFBFBD>)<29><1B>4I<34>!<21><13>M<>N<>1<><07><> 2<><32>J<1D> K<01><16> <0C> <0C>z<EFBFBD>)<29><1B>4I<34>!<21><13>M<>N<>'*<2A>e<EFBFBD>d<EFBFBD>l<EFBFBD> <09>#<23>BG<42> <09>(<28>(<28>)><3E>?<3F>>A<>!<21>f<EFBFBD>T<EFBFBD>c<EFBFBD>l<EFBFBD> <09>(<28>(<28>):<3A>;<3B><>  K<01>sT<00>!O<<04>O<<04>? P<02> P6<02>1A7Q+<02>
P3<05> P.<05>.P3<05>6
Q(<05>Q#<05>#Q(<05>+
S<05>5AS <05> Sc
<00>0^<07>[RS5 [R5 [R 5H<>up4SU3m[ U4SjU55(dM&UH<>nURUS[U4SjU5S505nU(dM4UR[TU[RS95 U[;a /[U'[URU5 M<> M<> [RS[U535 g) u!阶段二构建函数调用边u?阶段二:解析符号,构建函数调用图 (CALLS 边)...r+c3<00>@># <00>UHoRT:Hv<00> M g7fr[r<><00>r6r<><00>caller_node_ids <20>rr7<00>#build_call_edges.<locals>.<genexpr><3E>s<00><><00><00>=<3D>9<EFBFBD>a<EFBFBD>4<EFBFBD>4<EFBFBD>><3E>)<29>9<EFBFBD>s<00>r<>c3<00>^># <00>UH"oRT:XdMURv<00> M$ g7fr[)r,rDr
s <20>rr7r <00>s!<00><><00><00>&`<60>I<EFBFBD>q<EFBFBD><14><14>Q_<51>I_<49>{<7B>q<EFBFBD>{<7B>{<7B>I<EFBFBD>s<00>-<01>-Nr<4E>u#阶段二完成。已构建边数: )r<>r<>r<><00>clearr<72>rjr9rlr<>rcrr
<00>CALLSr.)r<>r<>r<><00> caller_name<6D> callee_names<65> callee_name<6D>callee_node_idr s @r<00>build_call_edgesr<00>s<><00><><00>
<EFBFBD>K<EFBFBD>K<EFBFBD>Q<>R<><14><19><19><1B>%8<>%><3E>%><3E>%@<40>!<21> <0B>$<24>[<5B>M<EFBFBD>2<><0E><12>=<3D>9<EFBFBD>=<3D>=<3D>=<3D> <14>'<27>K<EFBFBD>,<2C>9<>9<><1B><1F><14>&`<60>I<EFBFBD>&`<60>bf<62>!g<>h<><0E>N<EFBFBD><1E>~<7E><19> <20> <20><19>,<2C>,<2C>!<21><1E><1E>"<12><13> <1F>o<EFBFBD>5<>35<33>O<EFBFBD>K<EFBFBD>0<><1F> <0B>,<2C>3<>3<>K<EFBFBD>@<40>!(<28> &A<01>0 <0B>K<EFBFBD>K<EFBFBD>5<>c<EFBFBD>)<29>n<EFBFBD>5E<35>F<>Gr!c<00>P<00>[RS5 [U5n[XbS3- 5n[XbS3- 5n[XbS3- 5n UV
s/sHo<>R 5PM n n
UV s/sHo<>R 5PM n n US:XaUOSUS:XaUOSU[
R "5R5[U5[U5S.U U S .n[US
S S 9n[R"X<>S S[S9 SSS5 [RSU35 [SU35 UV
s/sH7o<>R[R:XdM"U
R (dM5U
PM9 nn
U(Ga<>[USR 5n/n/nUH9n
UR#U
R 5 UR#[%U
U55 M; U(GaR[&bf[(c [+S5e[(R,"USS9n[&R."U5nUR1U5 [&R2"UU5 O[[US
S S 9n[R"SUUVVs/sHnUVs/sHn[5U5PM snPM! snnS.USS9 SSS5 [U S
S S 9n[R"UUS SS9 SSS5 [RS[U535 [RSU35 [RSU 35 [SU35 O [R7S5 [S5 XxU 4$s sn
fs sn f!,(df  GNe=fs sn
fs snfs snnf!,(df  N<>=f!,(df  N<>=f) u!阶段四持久化存储结果u-阶段四:持久化图谱与向量索引...z_code_knowledge_graph.jsonz
_rag.faissz_rag_metadata.json<6F> full_project<63> single_fileN)r<>rD<00>mode<64> generated_at<61> total_nodes<65> total_edges)<03>metadata<74>nodes<65>edges<65>wr|)<01>encoding<6E>F)<03>indent<6E> ensure_ascii<69>defaultu 图谱结构已保存至: u✓ 图谱结构已保存: rz-numpy is required when writing a FAISS index.<2E>float32)<01>dtype<70>simple_l2_vector_index)<03>format<61> dimension<6F>vectors)r#)r"r#u- 向量索引已保存。函数节点数: u 向量数据库: u 元数据: u✓ 向量索引已保存: uE 没有可生成向量的函数节点跳过FAISS索引构建。u-⚠ 无向量数据跳过FAISS索引构建)r<>r<>r)rsrtr<00>now<6F> isoformatr.r<><00>json<6F>dumpr<70>rzr r<>r<rcrV<00>faiss<73>npr<70><00>array<61> IndexFlatL2<4C>add<64> write_indexr5r<>)r<>r<>r<><00> target_pathrr'<00> output_path<74>graph_data_path<74>vector_db_path<74> metadata_pathr0<00>
nodes_dict<EFBFBD>edge<67>
edges_dict<EFBFBD>
graph_datar<EFBFBD>r<>r)<00>metadata_for_faissr*<00>
vectors_np<EFBFBD>index<65>vectorrs r<00> save_resultsrB<00>s,<00><00>
<EFBFBD>K<EFBFBD>K<EFBFBD>?<3F>@<40>'<27>
<EFBFBD>3<>K<EFBFBD><19>+<2B>+<2B>5O<35>(P<>P<>Q<>O<EFBFBD><18><1B><1B>J<EFBFBD>'?<3F>?<3F>@<40>N<EFBFBD><17> <0B> <0B>3E<33>&F<>F<>G<>M<EFBFBD>+4<>4<>)<29>$<24>)<29>)<29>+<2B>)<29>J<EFBFBD>4<>*3<>4<>)<29>$<24>)<29>)<29>+<2B>)<29>J<EFBFBD>4<>,0<>><3E>+A<>K<EFBFBD>}<7D>(,<2C> <0A>(=<3D><1B>4<EFBFBD><18>$<24>L<EFBFBD>L<EFBFBD>N<EFBFBD>4<>4<>6<><1E>y<EFBFBD>><3E><1E>y<EFBFBD>><3E> 
<EFBFBD><1C><1B> <06>J<EFBFBD>
<0E>o<EFBFBD>s<EFBFBD>W<EFBFBD> 5<><11> <0C> <09> <09>*<2A><01><05>s<EFBFBD>K<>
6<EFBFBD>
<EFBFBD>K<EFBFBD>K<EFBFBD>0<><1F>0A<30>B<>C<> <09> '<27><0F>'8<>
9<EFBFBD>:<3A>(1<>f<>y<EFBFBD>t<EFBFBD>I<EFBFBD>I<EFBFBD><18>AR<41>AR<41>4R<34>d<EFBFBD>W[<5B>We<57>We<57>d<EFBFBD>y<EFBFBD>N<EFBFBD>f<><15><17><0E>q<EFBFBD>)<29>3<>3<>4<> <09><1F><1A><14><07>"<22>D<EFBFBD> <13>N<EFBFBD>N<EFBFBD>4<EFBFBD>><3E>><3E> *<2A> <1E> %<25> %<25>&8<><14>y<EFBFBD>&I<> J<>#<23> <13><14> <20><15>:<3A>&<26>'V<>W<>W<><1F>X<EFBFBD>X<EFBFBD>g<EFBFBD>Y<EFBFBD>?<3F>
<EFBFBD><1D>)<29>)<29>)<29>4<><05><15> <09> <09>*<2A>%<25><15>!<21>!<21>%<25><1E>8<><19>.<2E>#<23><07>@<40>A<EFBFBD><18>I<EFBFBD>I<EFBFBD>&><3E>)2<>Y`<60>'a<>Y`<60>v<EFBFBD>6<EFBFBD>(J<>6<EFBFBD>%<25><15>u<EFBFBD><1C>6<EFBFBD>(J<>Y`<60>'a<><1A>
<1A>%*<2A><16>A<01><16>m<EFBFBD>S<EFBFBD>7<EFBFBD>;<3B>q<EFBFBD><14> <09> <09>,<2C>a<EFBFBD><01><05>N<><<3C> <12>K<EFBFBD>K<EFBFBD>G<><03>N<EFBFBD>H[<5B>G\<5C>]<5D> ^<5E> <12>K<EFBFBD>K<EFBFBD>/<2F><0E>/?<3F>@<40> A<> <12>K<EFBFBD>K<EFBFBD>/<2F>-<2D><1F>9<> :<3A> <11>/<2F><0E>/?<3F>@<40> A<><41><0E><0E><0E>^<5E>_<> <0A>=<3D>><3E> <1A>M<EFBFBD> 9<>9<><39>{5<><35>4<>
6<EFBFBD> 5<><35> g<01><>0)K<01><>'a<> A<01>@<40><><<3C>;<3B>sf<00>M<04>4M<04>*M$<03>8!M6<04>M6<04>0M6<04>N<03>3
N<10>=M;<16>N<10>
N<03>6N<03>$
M3<07>;N<10>N<03>
N<07>
N%c <00>,<00>[[U5R55n[RR U5(d[ SU35e/n/n[5n0n[R5 [R5 [R5 [RRU5(aSn [XXgU5 U=(d SnO0Sn [XXgU5 U=(d S[U5R3n[!XVU5 U(a[#XVU5 GOZUGHSn
U
R$[&R(:XdM$UR+U
R,05n U
R.=(d SU
R0SU
R23U
lU
R4=(d SU
lU
R6=(d S /U-U
lU
R8R;U R+S
S 5U R+S S 5[R+U
R0/5[R+U
R0/5[R+U
R2/5[=U
5S SS.5 GMV [?XVX0X<30>S9$)z8Build a code knowledge base without interactive prompts.zTarget path does not exist: r<00>projectr<00>file_z Function z , located at <20>!Semantic enhancement was skipped.r<>r<>rIrKF<>r<>rKrLrMrNrBr?rQ)r') rsr<00>resolver<65>r(<00>exists<74>FileNotFoundErrorrXr<>rr<>r<><00>isdirr<72>r<><00>stemrrrzr r<>rSr,rHr/rDrJr<rRr<>r1rB) r5r'<00>semanticr<63>rPr<>r<>r<>r<>rr0rs r<00>build_code_knowledge_baserN4s<00><00><15>d<EFBFBD>;<3B>'<27>/<2F>/<2F>1<>2<>K<EFBFBD> <0A>7<EFBFBD>7<EFBFBD>><3E>><3E>+<2B> &<26> &<26><1F>"><3E>{<7B>m<EFBFBD> L<>M<>M<><12>I<EFBFBD><12>I<EFBFBD>$<24>&<26>O<EFBFBD><1E><19><17><1D><1D><1F><15><1B><1B><1D><13><19><19><1B> <09>w<EFBFBD>w<EFBFBD>}<7D>}<7D>[<5B>!<21>!<21><1D><04><1D>k<EFBFBD>i<EFBFBD>Rg<52>h<><1D>*<2A><19> <09><1C><04><1B>K<EFBFBD>I<EFBFBD>Pe<50>f<><1D>A<>5<EFBFBD><14>k<EFBFBD>):<3A>)?<3F>)?<3F>(@<40>!A<> <09><14>Y<EFBFBD>?<3F>;<3B><0F><1C>Y<EFBFBD>3H<33>I<><1D>D<EFBFBD><13>y<EFBFBD>y<EFBFBD>H<EFBFBD>-<2D>-<2D>-<2D>0<>4<>4<>T<EFBFBD>W<EFBFBD>W<EFBFBD>b<EFBFBD>A<><08>#<23>|<7C>|<7C>c<><19>4<EFBFBD>9<EFBFBD>9<EFBFBD>+<2B>]<5D>SW<53>Sa<53>Sa<53>Rb<52>/c<><04> <0C>"&<26>/<2F>/<2F>"X<>5X<35><04><0F>!%<25><1E><1E>!H<>C<EFBFBD>5<EFBFBD>=<3D>3H<33><04><0E><14>#<23>#<23>*<2A>*<2A>'<27>|<7C>|<7C>I<EFBFBD>r<EFBFBD>:<3A>$,<2C>L<EFBFBD>L<EFBFBD><1E><12>$D<>0<>4<>4<>T<EFBFBD>Y<EFBFBD>Y<EFBFBD><02>C<>!0<>!4<>!4<>T<EFBFBD>Y<EFBFBD>Y<EFBFBD><02>!C<> 1<> 5<> 5<>d<EFBFBD>n<EFBFBD>n<EFBFBD>b<EFBFBD> I<>&5<>d<EFBFBD>&;<3B>+0<>'J<> ,<12> <13> <1E>" <18> <09>i<EFBFBD>d<EFBFBD> b<>br!c <00><><00>[RS5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5R 5nUS :Xa[RS
5 g US :XGa-[S 5 [S5 [S5 [
(a[ [
5OSnU(aUS:XaSnSUS3n[U5R 5nU(d<>[
(ae[RR[
5(a=[RR[
5(a[
n[SU35 OQ[S5 [S5R 5R5nUS:wa [S5 g M<>[U5n[RRU5(dJ[SU35 [S5R 5R5nUS:wa [S5 g GMV[RRU5(dJ[SU35 [S5R 5R5nUS:wa [S5 g GM<>Sn[SU35 [S5 O<>US:Xa<>[S 5R 5nU(d [S!5 g [RRU5(d[S"U35 Ma[U5RR5nU[;a<[S#US$3S%S&9 [5R 5R5n U S:waM<>UnS'n[S(U35 [S5 O [S)5 g [S*S%S&9 [5R 5R5n U S:wa [S+5 g /n
/n [5n 0n [ R#5 [$R#5 [&R#5 [RS,5 US :Xa'[)XJU X<>5n[RS-US.35 O%[+XJX<4A>U 5 [RS/U35 [RS0[-U
535 [/X<>U 5 [S5 [S15 [S5 [S25 [S3[-U
Vs/sH$o<>R0[2R4:XdM"UPM& sn535 [S45 [S55 [S65R 5R5nUS:wGaU[RS75 [S85 U
GH-nUR0[2R4:XdM$UR6(aM7S9UR8S:UR:3UlS;UlS</S=-UlU RAURB05nURDRGURAS>S%5URAS?S%5[ RAUR8/5[&RAUR8/5[$RAUR:/5[IU5S@SASB.5 GM0 O [KX<>U 5 [S5 [SC5 [S5 [SD5R 5R5nUS:wa#[RSE5 [SF5 X<>4$US :XaSGnO[U5RLnSHU3n[OX<>UXF5unnn[S5 [SI5 [S5 [SJ[-U
535 [SK[-U 535 [SLU35 [RRU5(a[SMU35 [RSN5 X<>4$s snf)Ou!交互式知识库构建主流程u)=== 交互式知识图谱构建流程 ===z3
==================================================u知识库构建模式选择z2==================================================u-1. 全项目模式 - 处理整个项目目录u'2. 单文件模式 - 处理单个文件u 3. 退出u请选择模式 (1-3): <20>3u用户选择退出)NN<4E>1z=
============================================================u全项目知识库构建模式z<============================================================u 未配置r#u当前工作目录ud请直接输入要构建知识库的项目根目录完整路径
(当前config.py中的默认路径: z): u#使用config.py中的默认路径: uC⚠ 您没有输入路径且config.py中的默认路径无效。u是否重新输入? (y/n): <20>yu知识库构建取消。u⚠ 路径不存在: u⚠ 路径不是目录: ru
✓ 将处理整个项目: u开始处理...<2E>2u*
请输入要处理的文件完整路径: u$输入为空退出单文件模式u错误: 文件不存在: u警告: 文件类型 u- 可能不是C/C++文件,继续吗? (y/n): rI)<01>endru
将处理单个文件: u无效的选择退出u4
即将开始构建知识库,确认继续? (y/n): u操作已取消u?阶段一:静态分析,提取代码实体与结构关系...u
已处理 u
个文件u已处理单个文件: u)阶段一完成。初步识别节点数: u阶段三语义增强u=此阶段将调用LLM API为函数生成摘要和向量嵌入u 需要处理的函数节点数: u6这可能会消耗API调用额度并需要一些时间z2--------------------------------------------------u是否继续阶段三? (y/n): u'用户跳过阶段三语义增强u'跳过阶段三直接进入阶段四r<E59B9B>r<>u跳过语义增强阶段r<E6AEB5>r<>r<>rKFrFrGu阶段四持久化存储u是否保存结果? (y/n): u'用户取消保存退出构建流程u构建流程已取消rDrEu构建完成u总节点数: u 总边数: u图谱文件: u向量文件: u,=== 知识图谱构建流程全部完成 ===)(r<>r<>r<><00>inputr<74>rrsr<>r(rIrKr<>rr<>r rXr<>rr<>r<>r<>r<>r.rrzr r<>rHr/rDrJr<rSr,rRr<>r1rrLrB)<19>choice<63>current_default_path<74>project_prompt<70>
user_inputr5<00>retryrrD<00>file_ext<78>confirmr<6D>r<>r<>r<><00>processed_files_countr<74><00>proceedr0r<00> save_choicer<65><00> file_namer7r8r9s r<00>build_rag_database_interactiveraes<><00><00>
<EFBFBD>K<EFBFBD>K<EFBFBD>;<3B><<3C>
<EFBFBD>/<2F><1A> <09>
'<27>(<28> <09>(<28>O<EFBFBD> <09>
9<EFBFBD>:<3A> <09>
3<EFBFBD>4<> <09>+<2B><16> <09>(<28>O<EFBFBD> <12>,<2C> -<2D> 3<> 3<> 5<>F<EFBFBD> <0A><13>}<7D><0E> <0B> <0B>(<28>)<29><19> <0A><13>}<7D> <0A>o<EFBFBD><1E> <0A>.<2E>/<2F> <0A>h<EFBFBD><0F>5A<01>L<EFBFBD>s<EFBFBD><<3C>0<>k<EFBFBD><1C>#<23>';<3B>s<EFBFBD>'B<>#7<> <20><13> E<02>FZ<02>E[<02>[^<02>_<02>N<EFBFBD><1E>~<7E>.<2E>4<>4<>6<>J<EFBFBD><1D><1F><<3C>B<EFBFBD>G<EFBFBD>G<EFBFBD>N<EFBFBD>N<EFBFBD><<3C>$@<40>$@<40>R<EFBFBD>W<EFBFBD>W<EFBFBD>]<5D>]<5D>S_<53>E`<60>E`<60>".<2E>K<EFBFBD><19>?<3F> <0B>}<7D>M<>N<><19>_<>`<60>!<21>"?<3F>@<40>F<>F<>H<>N<>N<>P<>E<EFBFBD><1C><03>|<7C><1D>8<>9<>)<29><1C>#<23>:<3A>.<2E> <0B><16>7<EFBFBD>7<EFBFBD>><3E>><3E>+<2B>.<2E>.<2E><15>-<2D>k<EFBFBD>]<5D>;<3B><<3C><1D>;<3B><<3C>B<>B<>D<>J<>J<>L<><05><18>C<EFBFBD><<3C><19>4<>5<>%<25><18><15>7<EFBFBD>7<EFBFBD>=<3D>=<3D><1B>-<2D>-<2D><15>0<><1B> <0A>><3E>?<3F><1D>;<3B><<3C>B<>B<>D<>J<>J<>L<><05><18>C<EFBFBD><<3C><19>4<>5<>%<25><18> <11><1D><04> <0A>-<2D>k<EFBFBD>]<5D>;<3B><<3C> <0A><1F> <20> <0F>3<EFBFBD><1D><12><1D>K<>L<>R<>R<>T<>I<EFBFBD><1C><15><<3C>=<3D>!<21><15>7<EFBFBD>7<EFBFBD>><3E>><3E>)<29>,<2C>,<2C><15>1<>)<29><1B>=<3D>><3E><18><1B>I<EFBFBD><EFBFBD>-<2D>-<2D>3<>3<>5<>H<EFBFBD><17>~<7E>-<2D><15>-<2D>h<EFBFBD>Z<EFBFBD>7d<37>e<>km<6B>n<><1F>'<27>-<2D>-<2D>/<2F>/<2F>/<2F>1<><07><1A>c<EFBFBD>><3E><1C>#<23>K<EFBFBD> <20>D<EFBFBD> <11>-<2D>k<EFBFBD>]<5D>;<3B> <<3C> <11>#<23> $<24> <11> <0A>(<28>)<29><19>
<EFBFBD>
A<EFBFBD>r<EFBFBD>J<><13>g<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>#<23>#<23>%<25>G<EFBFBD><0E>#<23>~<7E> <0A><1F> <20><19><13>I<EFBFBD><12>I<EFBFBD>$<24>&<26>O<EFBFBD><1E><19><18><1D><1D><1F><15><1B><1B><1D><13><19><19><1B>
 <0B>K<EFBFBD>K<EFBFBD>Q<>R<> <0A><13>}<7D> 5<>k<EFBFBD>i<EFBFBD>6E<36>!^<01><1D><0E> <0B> <0B>j<EFBFBD>!6<> 7<>z<EFBFBD>B<>C<> <1C>K<EFBFBD>I<EFBFBD>Pe<50>f<><0E> <0B> <0B>-<2D>k<EFBFBD>]<5D>;<3B><<3C>
<EFBFBD>K<EFBFBD>K<EFBFBD>;<3B>C<EFBFBD> <09>N<EFBFBD>;K<>L<>M<>
<15>Y<EFBFBD>?<3F>;<3B>

<EFBFBD>/<2F><1A> <09>
$<24>%<25> <09>(<28>O<EFBFBD> <09>
I<EFBFBD>J<> <09> ,<2C>S<EFBFBD>Y<EFBFBD>1f<31>Y<EFBFBD><01>&<26>&<26>T\<5C>Te<54>Te<54>Je<4A>!<21>Y<EFBFBD>1f<31>-g<>,h<>
i<EFBFBD>j<> <09>
B<EFBFBD>C<> <09>(<28>O<EFBFBD><13>4<>5<>;<3B>;<3B>=<3D>C<>C<>E<>G<EFBFBD><0E>#<23>~<7E><0E> <0B> <0B>=<3D>><3E> <0A>7<>8<><1E>D<EFBFBD><13>y<EFBFBD>y<EFBFBD>H<EFBFBD>-<2D>-<2D>-<2D>d<EFBFBD>l<EFBFBD>l<EFBFBD>l<EFBFBD>!(<28><14><19><19> <0B>:<3A>d<EFBFBD>n<EFBFBD>n<EFBFBD>=M<>N<><04> <0C>"<<3C><04><0F>"%<25><15><14><1C><04><0E>0<>4<>4<>T<EFBFBD>W<EFBFBD>W<EFBFBD>b<EFBFBD>A<><08><14>#<23>#<23>*<2A>*<2A>'<27>|<7C>|<7C>I<EFBFBD>r<EFBFBD>:<3A>$,<2C>L<EFBFBD>L<EFBFBD><1E><12>$D<>0<>4<>4<>T<EFBFBD>Y<EFBFBD>Y<EFBFBD><02>C<>!0<>!4<>!4<>T<EFBFBD>Y<EFBFBD>Y<EFBFBD><02>!C<> 1<> 5<> 5<>d<EFBFBD>n<EFBFBD>n<EFBFBD>b<EFBFBD> I<>&5<>d<EFBFBD>&;<3B>+0<>'J<> ,<12> <13> <1E>" <1D>Y<EFBFBD>3H<33>I<>

<EFBFBD>/<2F><1A> <09>
'<27>(<28> <09>(<28>O<EFBFBD><17>5<>6<><<3C><<3C>><3E>D<>D<>F<>K<EFBFBD><12>c<EFBFBD><19><0E> <0B> <0B>=<3D>><3E> <0A>%<25>&<26><18>#<23>#<23><0E><13>}<7D><1D> <09><18><1B>%<25>*<2A>*<2A> <09><1B>I<EFBFBD>;<3B>'<27> <09>5A<35><11>i<EFBFBD><1B>6<06>2<>O<EFBFBD>^<5E>]<5D>
<EFBFBD>/<2F><1A> <09>
<1B><1C> <09>(<28>O<EFBFBD> <09>N<EFBFBD>3<EFBFBD>y<EFBFBD>><3E>*<2A>
+<2B>,<2C> <09>K<EFBFBD><03>I<EFBFBD><0E>'<27>
(<28>)<29> <09>N<EFBFBD>?<3F>+<2B>
,<2C>-<2D> <09>w<EFBFBD>w<EFBFBD>~<7E>~<7E>n<EFBFBD>%<25>%<25> <0A><0E>~<7E>.<2E>/<2F>0<>
<EFBFBD>K<EFBFBD>K<EFBFBD>><3E>?<3F> <14> <1F><1F><>2gs <00>#!a <0E>a r[)NTNr<4E>)<rrr<>r-r/<00> ImportError<6F>numpyr0r<>r<00>pathlibr<00>loggingr<00> collectionsr<00>modelsrrr r
<00> code_parserr r r rrrrrrrr<00> llm_processorrrr<00>configrrr<00> getLoggerrnr<>r]r<>r<>r<>r r)r1r=rVrXr<>r<>rrrBrNrarvr!r<00><module>rls<00><01><04>
<EFBFBD> <0B><11><10><0E><16> <0C><1D><18><0E><15>#<23>;<3B>;<3B><02><02><02><02> Y<01>X<>F<>F<> <10> <1A> <1A>8<EFBFBD> $<24><06>"<22>$<24>'<27><13><1F><04>%<25><11><1D>d<EFBFBD>#<23><0F>=<3D><10><15> <15><06>8<14><14><y<0E>x<16>&z<0F>zH<01>BG:<3A>T.c<01>bT <20><>y<13><11> <10>E<EFBFBD><11><><13><0E> <0A>B<EFBFBD><0E>s"<00>C<00>C<00>C<03>C<03>C'<03>&C'