From 39f54670d3ee5b1306f25817edec6c28360abc80 Mon Sep 17 00:00:00 2001 From: kasinadhsarma Date: Wed, 25 Dec 2024 20:55:17 +0530 Subject: [PATCH] Enhance input validation in attention mechanisms and consciousness model; add padding for variable sequence lengths --- models/__pycache__/attention.cpython-310.pyc | Bin 3880 -> 4287 bytes .../consciousness_model.cpython-310.pyc | Bin 7771 -> 8818 bytes .../consciousness_state.cpython-310.pyc | Bin 4359 -> 4737 bytes models/__pycache__/memory.cpython-310.pyc | Bin 4390 -> 4628 bytes models/attention.py | 68 ++++++++++++------ models/consciousness_model.py | 19 ++++- .../conftest.cpython-310-pytest-8.3.4.pyc | Bin 1692 -> 1692 bytes ...consciousness.cpython-310-pytest-8.3.4.pyc | Bin 9928 -> 12928 bytes ...t_environment.cpython-310-pytest-8.3.4.pyc | Bin 7147 -> 9452 bytes ...arc_reasoning.cpython-310-pytest-8.3.4.pyc | Bin 10164 -> 10207 bytes ...nch_reasoning.cpython-310-pytest-8.3.4.pyc | Bin 8817 -> 8840 bytes tests/benchmarks/test_bigbench_reasoning.py | 9 ++- .../test_base.cpython-310-pytest-8.3.4.pyc | Bin 4821 -> 4821 bytes ...est_attention.cpython-310-pytest-8.3.4.pyc | Bin 5076 -> 6892 bytes ...on_mechanisms.cpython-310-pytest-8.3.4.pyc | Bin 6974 -> 8330 bytes .../attention/test_attention_mechanisms.py | 41 +++++++---- ...e_integration.cpython-310-pytest-8.3.4.pyc | Bin 6704 -> 8281 bytes ...te_management.cpython-310-pytest-8.3.4.pyc | Bin 9122 -> 10524 bytes ...t_integration.cpython-310-pytest-8.3.4.pyc | Bin 5762 -> 7523 bytes .../test_memory.cpython-310-pytest-8.3.4.pyc | Bin 8697 -> 11661 bytes ...ry_components.cpython-310-pytest-8.3.4.pyc | Bin 6264 -> 13965 bytes ...te_management.cpython-310-pytest-8.3.4.pyc | Bin 8686 -> 10532 bytes 22 files changed, 96 insertions(+), 41 deletions(-) diff --git a/models/__pycache__/attention.cpython-310.pyc b/models/__pycache__/attention.cpython-310.pyc index a7b4638db84c28ba7bdeb90d8027a5e6e41954f5..0268c680780f4239e8825d5d9172c7592b97ced2 100644 GIT binary patch literal 4287 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 jy2dv>|H6jn*rfb7s>J^$kQwcq>Qkq_^SNlZ z0|RaSUx)jD+cJ!QQ)ji===>N@`9}zDaF!bV`7g`NzRBjgm6@i&jLhyk+G3_|*624f zukSJAuE8yCKQ*{5%me?4)em5CxC@KBurxXQ$mliBu!gbQGnMzNag`K#oGNE;GET*S z23A{l(J3E85k{YJqi=H7xA-QvgpH+a?g%U*oT2xLF=V{Ky{GNI>-&D-`+SQxMdQHZ zEiK!^r{9|f?}&hR(F>rj2|b5KhUQIU*y8JaHz8_`<7ip63hY#XX@UY0k zyJ_(tPQ#B2d039)fe80TqL9Zs+W#*y#3sX%Wmpd46mRgN+8)b-PX^V>l8=&Vba|!i z_)#oH_&^phAH-#aHRmq>^Vh#n`^S%zpHH%g_FgKFej=V^s>Nk7E+$nZ<4UM&=U)}A z+6T_cQISqbWZ^0Q3{e?Rj47KTU20Yvky)FNR&7DrwGHXOZf+US+^RA4YU9AAXGZh< zS1iFRmgXy#7A)=Bp3!<8ty@~}as#Kxc6)2eDJNqgl@~=xo>WmJU2Ii0NO&ZC2<31w zu13ntbLHMkauG}AJe&x5tgJ(Etem4bod~s#_>2)EoWp?_P&%l_Pv>D%EkrC|21|7o zGZ(?@Im#|YI(*&Q&zbV0XpqKb8AZ>H|Nip!sK~_a!?;ZHn2*X>X7O$D7~hakLfjq{ z`}hv5y`6r0d&RCZth{}Ga698;*~GWeQ{I3Gn7jB3*oL*i=&xn1v6FXSpXxiyi0$qv zFUj%YW%N+_3+?bo*;!m3DzB0;BAf54HW!tU89GS2fpVp&CNdvTyq9ea3WffCJmoGk zkSS9@&y1bAwZqMcA)B?Go3+z2P8&6{sirYx$`siI&4*@bEvUVzUAr9Fb>QeMvZoCW zY?zst@4s=(uY)&^1(nXpCycwB#%Z(ir&tBP8o(H9W+G3UTgGXtwy;wsi`tqtIdTuu z!QQO8HN{xhs66gHVc18jY9Dm!7C_Q}W}dd|hCIdoyLB70+uD1(4lu7%cb0pfuFVYH zUw+&A%tGIoZqyyT)rF5w(c7%My4S7QbpuxT9Gb}ZApRkOsv(46>VrZ84R|<4a)rh4 zGE!W?$Q&T(h4O5F)R9*JrsB;18dqsG$kYrxk^7HJtS@7N^|mr`+M(c(x*nQ);Y`jW@<*Ciro z?4Es&c1G%%39*j{?X!QLy@dV5-cIsik0}e#+1tY9PELfR(j_UwIf< z%jM;`D1~x{X%Sb-sR}t5DL0F&Y?3N}l9vD-aUxWcLLzuHOwv@b4^*QphE*0nmZ;>0 z3h3LD{RxVbY|(lfB;JDPt;uVozfIy6i7%6Qhs3)ODtHiAgHc5LRn4S~mLa&hdE8|H zVnoGQ||m%-lX-l_!4cRf%-^!NqZ~50THw} ztiTFbz;0Q$*e%wvZZOYW13-05+YAV%08{}Z-LpLN0$5H`(pypVa1y7Bkwz5pVgR$1Ah~+vg5Xnr9YVQ#A}Jug*H`pPF2pC%E_nt zuAFm}n5q%M%Nr=o7to;v+sP}jPrReVJ;xE^K9I+uEV2+6qe?)AfL*%o9f=U-cK}X? z+0{rEll{>Jl+69x3ky$o6OS)#X$?{JSD3=svb_xo5 zz(7QCO10H8xcSWfgL&$Jda&9-8O1ng22Kam!z#amo>ezyEGLp`P3@UcH=fX#T{ke> z12u4U(X~!?E)`l$%8SMSIpL*Bq-)m>{t>#sWd!vD>{9-m#9a~}LMU6Hj`sX{!0(ay zJ_!xt?6KYUwN zc6Wx8T=Q!De;8coatH4!w>lo97HRy|$gAA@8pd@xYyT@Bex8cT`@tOTi5VFs)l1K4 Mp|qg9nAd*&e==VFh5!Hn diff --git a/models/__pycache__/consciousness_model.cpython-310.pyc b/models/__pycache__/consciousness_model.cpython-310.pyc index 8f9fee0aaabc0e1e3d483e409377be320438ba1d..b4a8b69949e6a3900d5ac7de92008bf05c3991a6 100644 GIT binary patch delta 3522 zcmaJ@U2Ggz6`ngYJ3G5O`@h~F|FJE!Wz#rJ^)fcyzmApnD5;68at6X zqd9Z#Ip>~x&bfEaH-9|-&*@Y*nT#vARwkF`|90$0scoY-iD3fIX*}+4RYhqkz9E=v zdWy|%vS*pC+S-EZM@3YyKHE~tif;;&PkXATL85OdH(}S0*!mXpWA{iSkj8~Mt<0AE zglDv(A|~QOX_2}@Dtxs zXqn5ZpYW3+A*?lpuZbi=OKdTkwWwjN^b;b9@nDtS-2RALmaSJ5KW1BY@;PPb^d|F} zQ0?fd!uvZpz};OlDR|9SJ0>iWLIq9PsZG^aQPI?XTR)93(jvXZdWbgTXGK<|?DTO3 zQD#I&=t8qIn;LXEKQHpoWu-1FazeLrn<_K~e?*Kxlb4#DUDzM+u3Zt^X~1qo+T}%2 z6hs8t;-(HSy^>!RseVC}w-}@4N3aBLyJVN8K}7~<*cF=IFNzZOb5!6|V7n|kQc>*4 zqW%KoN04txl(1FNTdJ*JgMN1uq0zi*N90ylhwyi2_y`3xHBh?|d*U|yUQ}w68`JUX z&h-)AZ8)x54aQ=JdmE*5o#j=}tv2eNPS>kmb*fH#*;_vp8f#5=wZ0TaJ?FXyhBJI7 zTnG6c3k};@Yc`xG?wAZUGXm}?0Mf^Tkz7c;%qQ*ka zZnkSG|8Q_$qJHHp8GMMyIU?slYLj97sru5YbB6OS5A{W7-3|2)(hBva=WwJ-TFBhy zhQm)_N*Dptb-6`84od+n+iq|nn@>jEh5E9?Pm=C^!S51t+A? z&7Dc>VbZz2>@+<1LE^5ABe-ErjZo@ga!~)d?y84<<>!K5S|xTq_`UV~p+59_MAuAa zY8KO3Q7tl)9b|Dm&geGY%$O$2s41p?rl@FLFp9$Z0(8cTo-?jIkGCWUmFfOao1P%~OTe z*9cjB9o;iB00}hrDYPtuu!wNS))!TN0DQzIlp(3nBUb2(3ZF(7g@DEcSzfedwqpIb zh}s6-!n~$$4PY%I4B*X}m+%NheCSsUvz;Rr1QE-X`L$zB#Pa{^cpe zR@#mNuQJ05^$^2O2m_VKAcSARfwdDtW)Q+ayBoqwLkF{E%+KyCak!_%N~`vW{hqE)Uk19m;vNKP0ySrI zC@J$*{Bo#$1?N^-)Oij(vz0B@0S(j@0w^Ytg}OLq%CEkr@l)W@s3Y|@x-EUSBLo2x zz!H~MG8BVVw>ORk^~&3WpO+FnimcIXFQ4RP@*?|_M6IJ3ZcJQ6`*k`Er;2tu?=4i( zdE3-ztJk``x{)|m9ro4ghHaV|iZ(_c-!XJ-B;R&AF4A}9teO@^;FPb2+M@Hw zdKi&N@^3a(EAS^NhRYzK)~;XYPt#Cl_Z8x(vGEhZRJqdQA0z(bME>94uF#Mg;{b!6 zBJM$u+UQ-aE==qo1X6Ot1eTf`LPiGtkDwk%F+e8%RdPeX6`IR+dw?(%>sph$-kgWT zx_rjy;M z8YJll&l`TJrZUPVEl#ppmeY0)YGZm`-dH%)30|MLKg%B@xj}>sxf`gHmm*K+9w;vU E55Ko;TmS$7 delta 2445 zcmaJ?TWl0n7@jk?oxR_;-AbVqQC4jQr6{CaYKz8O6AJPGG-bPI+U~Y{>6uxe^^9BP z^293S_y+3kgNYatV|X)BUiFdJG0`_;A2i0q7ZvgUr*yG3aVGPf|NNKppWFYq0UmxX0|uzxlpPte80g!0n8xvQ zsTJh@HaRUj0Vl|V+@QW;35E^v09Uy}jiv&&kQ3%%u=zb(n1{GZ15Ft$5hu!{UpF`j4>g7!G1fR{#T%(ExG$>}tX zX<7*$ZxbiQ2~A`r*sEk#qRDxc-GS96d7P?Ly(CjIBWI;fFNwWbnI;=F1>2E^VNyH| z!(=K!TWh5|j$Rn*!6U=tr7oI;2m+ceZ;C0N;aw2X&AUojnuaN6nsS@at{bX1`A&or z=W*Ck9d<5CyKks7@-ZowT^7Ilk7x{zT@vlU6>?Gx2KR@@ZxUCh=GkJwWY3CH@MZr9 zIJin}t_WV)LADFJY&XIlgclG7IxvXRFaSs4fFPlMG9tEz9_w}Wvqh_(UtlU&a>P|= zvAlX8o}A2H6%(QS@xvH$1OYE38w1GoxN5~bZ@X&IHW>_&U#Odwt66jTn(1nwEL&^{ z99?bMWL1lWF!B(>UWDhx?(h`p7T3aQ{Y6xah+E;_7$$K8(|NlvH)R!-#f zxNMfIY-y@mw`+CVn}{1PR%~;Y&L`}$os}JM5tOu5r?A_Bq2ofOHvc#u^r^L zuw%{4ssZ*@9Rb(Ou+&&hbj63rSK^KMwI?d5Pyk%TvKf=HyNKOjVIgl>Wz(LkQg&8o zi34O>j3#~%@o-Y?Oiq$-#pUFW@q^%-3$YapQN4BW)V68d4t4^;+lO~i${<_>$QkTO zlqV7JWEpOY>#wnD$t=JM*%?$)1n(3!9W74zuDF*v*mDkD&Lb=#^dNW(YKV4!w}#99 z<~B?B60#z$W(MS6BylG*+UO)M;KJ9RGzfn9Fr`J|N^azm7O)Upd*we`xbBV$e4-(9 zt+Uf)80y&P7*IAEH^9Ts{c!n#P8PQ|Y@I4p1uD~#;*iRK%mTKrWN-zTMk@I?CIQmY znkp1MX$8@LGVg>s@=0K$5D(8Q>=srR5M>0~5VX+;ZOmh^2ryF&$WJ-lSYw#*b&2|T z=(_Zw;v{(j_$LW`5{Grdig;jNVjsX{9`w5mm;kwkORS&r)JbPj8#dkdqI@S zJ_Wl$4d5Ju2M|%7QD8zy0P!v<<^&ff7GH;s=COcZ+|9n!@JPTb%mUKE`hyn|Z?1(O z9`HL*){_QsKWRx+YLgQZkrsj9fKFsDd^|_kWpIS10& zm05d^9TC+nnTAoW()>cvUh_JtIK;AnN?hHl)>#2s zJI`iKn_Ynftcma*LJ{+Y^0r->I%gJV=WNUMmGiYJ+ybMPhf#pH*!0G|^$PG$h_uE4 zGIEBf@Wzw?36PAU5`)Bu{&z?ZfwcCjvP|#|+>7`O5>X&MNCRb{R^U9B$siyL(0#h<0y%GRUAxCAoZ7IAvp zPO?i}+V*+$6C7a>0Y@DWqkTg<#qNlByYE!jYar${b`v!o*PTM?Gx2L*YS)?@_Duj+ zhtsJqnBK2s^G^!7YM-|I+av<{|%!urx$F&2A9hpP_08MC3@Bjb+ diff --git a/models/__pycache__/consciousness_state.cpython-310.pyc b/models/__pycache__/consciousness_state.cpython-310.pyc index 3e85b2edba6d7470e608f94bdd043e268fea048c..249de4e5bb188e0b1b127082b2528a7e9adc3f2a 100644 GIT binary patch delta 1582 zcmY*X&2QX96rb_uu6OO-d_tfhrZm6?E(G<`v*GX(=$KKGa z##)sYa;+M+eTBGLd2jYQle$y|2HmjO^uX^`9R$?50Qd4t#wqZrY~L%TD}{(`^m5J*zr96 zP3or_qfwXn4LQ@3!z64%@KyN2?=V6fhgyUPzK_4a5soB|2l5cz2S1j%ysZ$pF;=)d zP>1N29ILSw>n@55z|)3k5#3(6CB?YA%-v-ltn3C;^oVzvlSJ#O|Ei{qiyT|J#SY?`JobMP_8W19 zTf74O{Q#9JFqbOq7VIOZ`zTZ#;Z;7uM@ip&D1)l8c$`;Y0v5NRGdZ5%PcIZLK#)SX8faGu0Xic&yVZS6`1|TgrT^2_5 zyqDB^HjH|%#Mlzkt7m$Qkap_3)Ne)Y6xUPBiQteJcinULLg>fwXsYFfk}KMD;%Rp2 zRdLa40$xwP(H3i;fT>6YT$K%M$%sN=*W{gK9jR;dvi%}8EZtF>m< zl$crEl7LU4gt^re>}#MW{{ubsRFa+-LeHV6o^xp5XpNzC#C-32^B&*(cxZo^+rJp5 zLEs@cbFa4gR~yg5=Nq<4;qcD^C~9MZ+8V)aodiUu1~K58)a+UNsE3I~>?c9nA|Y|9 zO&#hEyq?xT#G`)CAU>%)G24}WWT19%54EO_ui?M7y{2kxhEc^xB^p$rRr zs2!ol_%S}z2|mKP{=ZiZUX2*#CR_{pjU%*zHiB=p+|C_=4o%@ehbvrR33~~RXESSH z3tbpu4-K6E$_-qiKQ(d>WW0&Y`?-J0=ktp2MP*B845TUzlm`%fh~Y_`5@_IyK!jq7 z7*BPuP|a(ia)5{_`~&o}p4UZ9n4-RfgeR(dZ=>8B-yB~DmlffGOHXM0d&q*53>}6i z%oAo$gUwmHD_^p-OF3^QJHssA9@1u#l4uxbG3Cu@M4Ej%qAbd2v&&M>uT84WD9h+5 zi_=jviMIIygZ(0TU|qpe@(=6GWrN4Nv@qk0CY;rvR+w4Jx|@Z$OF@OHKLfiU7wp;o zG;642R>67I={=0H?q+AA;Bh+c4C$z!Z5H9_%#NB_RJTjxlyrCo{&?Y>IDb@F;Et!P za8G;WOZ$RVZ`F>5&KG&+?^30?@$VRoH(?3+)vV& zuAA@5-;5 z+dx~|WDe^n?v$Es`CB!@Kglb##f_V)-6|XJL0E5L)>CQ7mQ?8@1s^N;M8UEG^_fom zPBu~MtIw3JD3};X6uTjRt-WKe0=+9=)mn~XEuYQHuzq#=0VIX>SxR<>l$ol1Ro>jK=1B4ASZPsp5-QmBqn7qjzIqGoWyBJq1c*}&m-zu3!GMOiizs3$ zQ}=@1y6Zy4B6o9V$T)wUngq z6`)B5>B+EpzLNh*7I;w~A{M`*e6gPk8cw9!)$p7!pT$MOq}3 z+cbiXw$hQ$+~qpl9mG^YuTK z&)&XZeKimj;uq0i)x+Onm)p}+A#WV+Iv>sJccB-71z?PjTm4ve6FH8A11temSjFB} z@~RidRB=zm<#AS5Z_9IRT74_e)aR)pG?&|Q{Xv$w@FE43pQnGxUPI;Pw~A+-lA5|OoMW~9@?n%Oc!dwJb3)YP%FJ11ycIZ6nf zfB&K<@CaEw5X?f>2)TF>ceZlgd6H16{p@5016N;?cR?rfNAy$gQ=_ZfE=GAWyB37tu;^p^hQgX&wX; g+0d0^>b-w) Tuple[torch.Tensor, torch.Tensor]: + """Process inputs through attention mechanism with residual connection.""" + # Use attention mechanism + attention_output, attention_weights = self.attention( + query=inputs, + key_value=memory_state if memory_state is not None else inputs + ) + + # First residual connection and layer norm + attention_output = inputs + attention_output + normalized = self.layer_norm2(attention_output) + + # Feed-forward network with residual + ff_output = self.ff_network(normalized) + output = attention_output + ff_output + + return output, attention_weights + + def forward(self, inputs: torch.Tensor, + memory_state: Optional[torch.Tensor] = None, deterministic: bool = True) -> Tuple[torch.Tensor, torch.Tensor]: """Forward pass with optional deterministic mode.""" # Input validation - if inputs.size(0) == 0 or inputs.size(1) == 0 or inputs.size(2) == 0: - raise ValueError("Input tensor cannot be empty") + if inputs.numel() == 0: + raise ValueError("Empty input tensor") - if inputs.size(-1) != self.hidden_dim: - raise ValueError(f"Expected input dimension {self.hidden_dim}, got {inputs.size(-1)}") - - # Layer normalization and attention - x = self.layer_norm1(inputs) - attended_output, attention_weights = self.attention( - x, x, mask=None, - training=not deterministic # Convert deterministic to training mode - ) + # Get input dimensions + batch_size, *dims = inputs.size() - # First residual connection - x = inputs + attended_output + # Reshape input if needed to match expected 3D shape [batch, seq, features] + if len(dims) == 1: + inputs = inputs.unsqueeze(1) # Add sequence dimension + elif len(dims) > 2: + # Flatten all dimensions after batch into sequence dimension + inputs = inputs.view(batch_size, -1, dims[-1]) + + # Apply layer normalization + normalized = self.layer_norm1(inputs) + + # Process through attention layers + output, attention_weights = self._process_attention(normalized, memory_state, deterministic) - # Feed-forward network with residual connection - y = self.layer_norm2(x) - y = self.ff_network(y) if not deterministic else self.ff_network.eval()(y) - output = x + y - return output, attention_weights diff --git a/models/consciousness_model.py b/models/consciousness_model.py index 9fc728c..fed4b21 100644 --- a/models/consciousness_model.py +++ b/models/consciousness_model.py @@ -280,7 +280,24 @@ def forward(self, inputs: Dict[str, torch.Tensor], deterministic: bool = True): """Process multiple modalities and generate cross-modal attention maps.""" if not inputs: raise ValueError("Empty input dictionary") - + + # Get dimensions from largest input tensor + seq_lengths = {name: tensor.size(1) if tensor.dim() > 1 else 1 + for name, tensor in inputs.items()} + max_seq_len = max(seq_lengths.values()) + + # Pad all inputs to match max sequence length + processed_inputs = {} + for name, tensor in inputs.items(): + if tensor.dim() == 2: # [batch, features] + tensor = tensor.unsqueeze(1) # Add sequence dimension + if tensor.size(1) < max_seq_len: + # Pad sequence dimension to match max length + pad_size = max_seq_len - tensor.size(1) + tensor = torch.nn.functional.pad(tensor, (0, 0, 0, pad_size)) + processed_inputs[name] = tensor + + # Continue with regular processing using padded inputs # Get dimensions from first input tensor first_tensor = next(iter(inputs.values())) batch_size = first_tensor.size(0) diff --git a/tests/__pycache__/conftest.cpython-310-pytest-8.3.4.pyc b/tests/__pycache__/conftest.cpython-310-pytest-8.3.4.pyc index 56c74291dd042e53a417dd54e8f49567ba2256d8..022fd8aa09f7bc6a4a68d96794ba278982acbceb 100644 GIT binary patch delta 20 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 diff --git a/tests/benchmarks/__pycache__/test_arc_reasoning.cpython-310-pytest-8.3.4.pyc b/tests/benchmarks/__pycache__/test_arc_reasoning.cpython-310-pytest-8.3.4.pyc index 1ba92ed19961e0031f13f41bf864949a9e200ffc..a878f39675e279ff3516868bae4fbe3f5dc0e339 100644 GIT binary patch delta 1214 zcma))OKcle6o&5^+ewHY{w7ZXHrC2QCsKpfA2Z} zIme^hVcl7W6P_9i_u@)NN>nvUFGaIer4#7 z(E4?e=lNdBV+J!SuP9kI9})#o6q9b`a9Tu>84)v5BFnQ;CQ3ZU^Sop<&L|>-xd~C` z1zzNniy=|rWnST6gfOS_D9>_?hf}7Zp4FdSFtUx+#B)71uwfEcr3JN!kDO zDtiz(D%f+!Ej_;_7l*+0Lr{Sld+rFddec=!*In<&(@fOd5zLJ8ng<*35*RGZL=+?T zAR>!V!pLBhF)A3Uz-Mu6_bfi^Fn%{ez)0_7_p)xt8JAzgQ+u-A&1U`Xv{+^K5_Zw;;9^U6U0eoADfwzXxxPdxi*T551kp^|ankg% z+v9{5q7Mu98TuVw)on|6t(CUZA8=gVH67efUpDPF)!svRnD92?9m2bWRl-ri8o?pF z5zI)CJT0dS8d(0m!mI-4<&8>1UZ1QF1pjJQKA}$J7N~5V@C@Nu!a;&Aca>_jVEPK3 z|6SoY9fQH!Gv$fWPPpKIP@3DG@#Jmxe_h>M`oGpct9Qd^ezH1!bA83Wh-BQ#6!|^EWx|JqkLAfmMt)V--~su2eFEm? RaASA$X-eHeu;gQn*53;}K7jxL delta 1110 zcma)(+fUPQ6vzAP7`I)xZH%p>8yj0Uxjhh{yvOipkVpauf@o!7Y@l1i)cguDctH&^ z{Sh=l&gPw&(IaZI|1hwOhw5 zmQoIm>E9!fpZ-PbT#?lex0Mk4A(DOUY0;2rNik-Mvs{{=eXG?K|1wOzRt3cvwW}sz zwQ82_s*^fRoa&}#Dp0p9&G4!Nat^hY8s(529x|vRt)(I*vH@})YN8J6nc`J1^``mc z7kQg3D&~wO%Z-CgGOCnjtco#9(tKhJbQ$VV0yUtii9IowO`glEx%f|wIZNb*yotB4 znhN^FJNgvRFtI_`&MeWd4(Q6?L&L6(JziqP<{q7}NbN?O2yKmdX78|#65Z^hJ{UBZ zHR{^4(dC7%rrVZkPOVeQAyYx?*maAe%3Z*z4v1O^5yGQ-*(;0CQJf-#!?OpXi<7xS zTmh%lqzz}92&ei8ceX-tW?XW!B2eEHS>W#QS?K73dKvN)KI~XmDU#yCEt+J#!56I* z!;fCstGy_X5#nb4$~WvsWh?P(QdNKybU>0tZ0CuMeY5RgVfzQ;TIg%Jpsm^43?#P?IZ+4UZ1SBDsRmu|zz~CoZ!Ct`M1KUXhG~l%pv9xHxVhs zDa2`ng1CgRBCfD*cYs8+33nGy(kvd3*s2(07ksw*KFl9M3?ljw1Bj!D^$l6Cr@mhI zKZy@Fml(%e-Fn@X-S;$-1?|13`>)MGU&GdIG~aH|{~XHw&E&bZ$KSN>5F!~iAK2n{ zO96>|W`#jYqHHP{gx~r&=(SJdOWZ}=Lp(%0V#~puq?Ng)8q&|UORXmTJC$HA%92v- E4^ciK#Q*>R diff --git a/tests/benchmarks/__pycache__/test_bigbench_reasoning.cpython-310-pytest-8.3.4.pyc b/tests/benchmarks/__pycache__/test_bigbench_reasoning.cpython-310-pytest-8.3.4.pyc index fa0fd056524036278e7ec7475b6f9689b5fdba38..6f6c23185573316e75217f9e500fd2ec57924701 100644 GIT binary patch delta 823 zcmZ{i&1(};6vf|tGf5|tWHOmdKAKKUf@pDPp?0AnD0QI~T-c3LEy35+R7p!RRIP8? z+JdyDwWZIGg%xH%L=nMSRCMEC;LcV50~b=<2r9MSSE=H{`Wc|Ik4D*>P0x^+D^`*zf&Gzi4}#JJj{|d$r5HQ&_3$v zUX-hTlt)=gY*>Yf$*TZFp0oHMON^@lcrhOH;{oyFm>4{UiNQ=S!Q(t}S@leAHb1%v z-()s7tH9DSuhKwe88_)$0U0ID7ucsb(l=hAv!$y8_R=Q;VA&O#AzpF06wr74LxVw@?cxT)6#oY!4%w~g+!9n!J8B4mYex8-wHc_+pKv^u>v!PF0 zIBU7I0pN)C%wcUkJaBEKQfJ~~=4JT?{t%6dl>I2{`pBhPzdKNG4mTR(GQBCfvdqa) zTcJ26P*6AZkpA7!!azSeKlPk=oqZ3=+Gy^L5*fpl-hH&eMVE5|X2hh^4y)pcQ?b15 z+na919q4DZYPB&T+6sGNQXDG`!Mu20*o1rH*{-AcDf!iDDLqm$Qcg*^CBnrL-q~Jk zH|Jz;J6_(L9Pon5l1C`wemse6pzXuegV4#*=qm* delta 795 zcma))&r1|x9LC@8yR+-g?9Pv!9cS0wS!X?zbm)*&P(%<|P}xagF$xi0S5z?AoeK4x zG>tOJlHMXhgBj=&MN}R-bP%GeRM-BA@)8(mecygbx89d|czB-o`@WyU%pc$AHZJJ8 zMsWGtW5dtXfpG2pmBcU!6_yT@0gVzdxl;oYC_FI--Q@f!F>LRvo#4r+h3PSb z>bMrr(KJ(;%IT=efn^t!5Is--&NY_#m2#CCD+y-u6tf&sAS|~?&(Tl|GhB%@o?*7w zv@6q7mjQ^}{rDjPw)jq#XQOOPLLC#GXE8CD8Jb+@=9m&%+-klLjL2kpZqe!_TvVK%V0xq&cW(dDH>7!UoxKQtIP ztilb1Y5!lC8e!>PqL84l1QUmVgn1y7xu6)eF+V7Yrn3vG;-PbMwX@X#D2s#c5i#k$ zf=RKrP)ddPM>J-HRV|94LXVdPhstFE1!YT1YTt}>3g~BVTXV&FVGZc&V)1oCoxria zJ+v_;&Uh!`x_IDq!gI0a4cZ)=Pg*k=42A~SNWI>;BDyNOVOsQ8Mqxp`t8BqN@wWX~ z>8gBrR?2B9u9O}r*F?py;+;qRPHSEUy;Az5+z=Q2vv5m%@DF4bWN=@~UBq92C9zyB mmtlvVCMjr}mYN0n#ry6!;$!tm>b4wsEM__mLzj5dvHk-wc+Wuq diff --git a/tests/benchmarks/test_bigbench_reasoning.py b/tests/benchmarks/test_bigbench_reasoning.py index 803f197..76274c6 100644 --- a/tests/benchmarks/test_bigbench_reasoning.py +++ b/tests/benchmarks/test_bigbench_reasoning.py @@ -114,9 +114,11 @@ def test_meta_learning(self, device, consciousness_model): torch.manual_seed(i) # Ensure different random patterns input_embedding = torch.randn(1, 64, 512, device=device) * (i + 1) # Vary input scale if last_state is not None: - state = last_state.unsqueeze(0) + # Expand state to match sequence length + state = last_state.unsqueeze(0).expand(-1, 64, -1) else: - state = torch.zeros(1, 1, consciousness_model.hidden_dim, device=device) + # Initialize state with correct sequence length + state = torch.zeros(1, 64, consciousness_model.hidden_dim, device=device) output, metrics = consciousness_model( { @@ -156,7 +158,8 @@ def test_consciousness_emergence(self, device, consciousness_model): torch.manual_seed(i) # Use consistent sequence length and vary input scale task_embedding = torch.randn(1, 64, 512, device=device) * (i + 1) # Vary input scale - base_state = torch.randn(1, 1, consciousness_model.hidden_dim, device=device) + # Initialize base_state with correct sequence length + base_state = torch.randn(1, 64, consciousness_model.hidden_dim, device=device) output, metrics = consciousness_model( { diff --git a/tests/unit/__pycache__/test_base.cpython-310-pytest-8.3.4.pyc b/tests/unit/__pycache__/test_base.cpython-310-pytest-8.3.4.pyc index 8afab32af4e383711da4cca2d7de48c98a470692..1e7511829d0f8285d932a704b2fa0a1b7970f3e0 100644 GIT binary patch delta 20 acmcbrdR3J>pO=@50SFGu=4|9XB?JIEm<4wL delta 20 acmcbrdR3J>pO=@50SGkCWN+j?B?JIEa0QA0 diff --git a/tests/unit/attention/__pycache__/test_attention.cpython-310-pytest-8.3.4.pyc b/tests/unit/attention/__pycache__/test_attention.cpython-310-pytest-8.3.4.pyc index 81c6a2947753802d6bbd3d45d0357137d4259077..2de0b97174086d40bf2e5974f2bbf107a6e5c14b 100644 GIT binary patch delta 2497 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 delta 305 zcmeBj+-Js@&&$ij00bNMW~WaO*vKc&IN40hl2K}MKa4xT`$)Ml zGHLQpUMA?Maf>B4H8JlNb7E4lrg#y^?4mRfVFMy;L4+NMNT2*y`T%P_kXbzWkW7fO zpC)@zJV+t|L?nWUBoL7dBESZef*dSSlmZk;1>#~3AOUeU4@XhT*h)a70k%0x|@FZ;=p|P>@+15zL~=;OfL}Z0WH|(xI}%7-a^^rIB#ubQ1%5!ndo`1>Z|InmiN`Gx_SEd zGhWMeEr!o8k2EeFoBhEn0lbli@M6fltL#mi`#iwX;p5A!GEp4QFT2P0uEO6ge3Li* zKM~IcUxpk9D4<%{&CNzquhuu(n~8|_{tYH|*vgG?eqjw2LP%L%EK%hZf^~xTsM$W# z-mYG3iDoTX5U)}*Elb3E?eHa~yQ*U4{$nDc?|J;A#+ioijtXqUoM-Xu`v8pI75ox)T}#zeOZ61Ev8(OZc^8hdK_f5S zP_oi!0$)y0`o9S{TV^=L%Lk{Rwu-qVj^Luj6oG?qP8=f|609Or^ulOwCsCXfhN#u! zD4s5?*K3W<=mjBKLKq}`mV{<*hqJt}qh>qV9@t(4&3cR`uC7IVxDnDw2{v{rd>XkL z@k>#4wT6R#jg9e91P$b?I^e;~y+A(##$8AA;KaSoleq6EAK&luza`X$;T3{ zr}xT$T!C zsIVosaWLnG9+Ea0p(9-;b-IWl%7q&VKO*yzSRpuc5T@io;G)%TZ6?)sqqW*ry(PXwW&9|@;5YL#JZ$@Bm8{H~(q+Fa=$zWVLo4; UG|Us`oHLOxmRI0P-YZ}K4=VRopa1{> delta 252 zcmccVu)%~cpO=@50SK1d&Q2E=-^j<#$mlUyjM0-Vm_d{8mi**KUir;a7+>%*YEG`@ zzY8Rz1ty9m12x=YjK9U5Tbfgn8K0R~P+C%yvYAOxn3b_)@-JD9$#!C#mT5p$MFn7` znMHmeP5_9=01=rWVQzijlF#W9~ zO2or`e`JlOyRCyM0nwu-ugcB z9SdLi#lbs?YT~Pssfh0rrWW&Qm+%5=HaNuF*f_sBekTkNif#X69Ho;BZ<~gmHN%;P9)&6&%6JX`B|Y8#Wq? z%o1ab*-aaq%@m0_1y%qpgTOf0PM}Do9H{^t@&%jyIL?@IcnuPsnUy=2ek}6Bdl{Q#u z6d=8v71e>8D@G@x*;jvwm>+ z=L&+s!Hp%s`kevYLUu|I(k;3|!OOS&Z~4Z5kLmq|+R-|S=tJ}% zu%N2^t_j9!UsD5j{ub1rSKEg7{2!RYw|V8wtMp!t^D;V#DH}Lo>z19g?3Ar1mr}V` z^&~uJp}J=C#vO3A!hrhBt+6WukTI-__< qICv{hSU*oVj*D^oxhU5z2I&u72goV9-F2Ltq`mPr@-7{Tzx+4V-@PLM delta 1097 zcmaKrO-vI(6vr8Ng=M#`rGQWpVatbfxGO*8{U36~M+Fw+8A|?4z*lTG5%|jcgSdw-Gr?zwC3okv@gmf0(c)tkV<0yA? z@IAU=tL8zIib@FKZs+Fp;IJ2>ff;`>+=^lZHUo8}4_*hxZx%zCl=mepOJ}y)5zeg* zQj0~nNNZRnrVStl5hpkt(KK|+QPR4tv8)EDIrCAmud|8z)Z z2_t1_+02UWh^uqXI}Q>dNhaBA?_NBOz6--8BV+63b)(?^j*v)NY#8KF zo4>qHAQtNAy^V(|R!gxw<}qL(E+b4t4xWZa$UXQNdM=!&3Vi5{`>$X?L)eH7I1~;Y z3-GQ~ArhI0f=nbyQl&;u6BD>heNL68rOYKwbEM>*OxDgA78?OO+#hsb7k?E;vQ4&h QtJg4`eTKmv!~5`!Uv9YPmjD0& diff --git a/tests/unit/memory/__pycache__/test_integration.cpython-310-pytest-8.3.4.pyc b/tests/unit/memory/__pycache__/test_integration.cpython-310-pytest-8.3.4.pyc index 4703ea2029c90c414bd12852b1934523177774d9..fdc7fc39ab39d7f61db6eefb654128019475eef7 100644 GIT binary patch delta 1679 zcmaJ=&u<$=6rSmOh@F=?6-DrE~Tl!Sl~KU6^~!J#NhX#s&O$Fp$_Yp*rC zPL!}KL(*$h!E&lN*vDSDq&F@|+~C56%ia(Y68`{jqP(|uT$3PnHQ#(Qe*WftJMZmZ z`t@bYGfkbq^Zi-3d4K*3>reV#oTYD7xOInoVDLOIz?|d74Puv)YP>F0k370-(fdcg z=YOE|#?gb~p%jOuYX5mk2&a+6Gm*@tND0Wtl*^$UDk0^{p&Vs{%s>j{A-$WUB+P`_ z14_v)!ify;fka7%T_OJB4(#IlJ`B_dB~UrmP)}&66OI0~$lA0>sPOC=60wmOB*exE zX(zp@b5e+LD4ShvQQ%Dbo8BF*9|ipA_R{gMhy;r{!?ZX4l0G+<-6< zECl$HM9d;A0VGnV-mz7Y#f?k2k?rmVjvpjhQE&NaN6Bqx3*ai8n+X3v}k+0=fZ!r9pQDFHQs6`g?7ttV~oRVtxmTWBpRGN zq5`XA1O}#%#{_B)Z#uO`9dft_n?7bMQ+!KOj_P#oVLG1y!sHSiZB=EQpM1D?5vu8l zr%&iKB+xj1ia;2QH(>aG(fFRU)W^c%aHEHr4>OS(v45?#^p@c^LOoPN?I05wp^+m| zF3kBmT;(i~2g;Ca6aSSUJ5U2Mq~a3^pqPQW_+zwNMr^Y?C7C6qz81LV%Qj~cG$J9@N)JIl8J%mR`X+qd;-)HDrH5gfo)#98F? z2p15}AuIsg*xMK%bNYn-|D2GhUN3-NSw1E!w)v=4#k(M#u)6D}5@H#TTS2&j@B+dr z!ixwmAzVgy7QikF4Y^9<)na8u%;6%n@-{N`BVI#z9pM_n8p7uY`v_O#^~z(fmeUsF z!s|k&wN2-CeY@p}BM9(Oa@?>PCKYIbK9HEC!(5_se}ALwJ%>Fy^Pd9OZ8Lte{FEZL zK_u>$XUi_0=_3RPpCR0dzbc=vR)8`%NvATXGsYI#MfNy5pPP+;EH~+Pyj*$b9~!ES AT>t<8 delta 148 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 Y*7)N}LRCbca3C9s5t*cdN>Hu+27B76wEzGB diff --git a/tests/unit/state/__pycache__/test_consciousness_state_management.cpython-310-pytest-8.3.4.pyc b/tests/unit/state/__pycache__/test_consciousness_state_management.cpython-310-pytest-8.3.4.pyc index ee26e5339dead9394fbbb0d2a9651b17500b663a..b1eecc4c7671b2581127b55c1637a208a2ab7b2a 100644 GIT binary patch delta 3541 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 G&;JGPAeHj~