From 55814054caf661a79a21d81dda83a823c319be64 Mon Sep 17 00:00:00 2001 From: Pakobbix Date: Tue, 19 Aug 2025 15:30:27 +0200 Subject: [PATCH] Refactor fetch_wikelo_information to also support armor. Making the RAG for Wikelo mission obsolete. --- databases/wikelo_crafting.db | Bin 36864 -> 36864 bytes .../wikelo_crafting_information_part_2.json | 161 ------------------ llm_tools/star_citizen_info_retrieval.py | 22 +-- 3 files changed, 12 insertions(+), 171 deletions(-) delete mode 100644 llm_rag_knowledge/wikelo_crafting_information_part_2.json diff --git a/databases/wikelo_crafting.db b/databases/wikelo_crafting.db index 1c6d7bd8d5e17c22fd7d6055dee605362f2a90f2..da628c2796409735b6b2b99a0aa4bace712d0e1a 100644 GIT binary patch literal 36864 zcmeHQO>7&-6<&(^At{rzY$r;h*q%^vEy1Q`+Lq-gC|Zi9WLcssi&Eqy7Ss_rrnXw{ z()&Y6G1P*T)EtVW_X0f>Mb9Z31Uxle;i~J$_o9G8{!Cnjjh5$o=A;1t|2rvW~0t^9$07KxZ zL7?(_S5N=Qh_8xOyebgop|HB5l45B^zg$T)+~`Qnr;`h5w2+*bO`}-D_c1gS3dV}O zqVSTa#DWXydkYugj7nsqVZm57nJ3XenLlHAo}0vXVFhW9|eCM_({*NyLY>CohLhf;VaQE+3WK`pn4?| zOq{Q-R7T?58$?r33d;ovWlJQ-V?n=@nL*RjC^h@$qu3of^2cLSM3ivsVr)jhib8Kp zi+N2^Wypb2vF(di!g*XQVOedGH0exwixi3MDm2BHd4b0wa;3|P(nbmA)|;2P{3uov zEHsJBk{lbqdii1un#GGCk+JbB*Dl7AIfAA|mB=|#QY9JPB0`a89iS`nutnK4X!ztR_zK&5L!VO|B}EpsC~yB1`)e?g`?})U9m%@+hKp zj!#I?@ET;(vWx)(mE_TDSitM+SVnUM%K{pjf^SeV2{2M@7t?8UU0p+S0#+qxaE9bT zWQH;ToghdGq#E7M@G|C+1HWqKSaA52YNoQ3;*5^HgUefJa%^%eg|b?SKnF^)NK}+r z2T`^0zMYL(^T+du=A(PH9sD&hf<6bI!*$AbSPG(+k<_ z&E*uJoRZ2!7Kl#Vv*)-8jTiC=ql}bC*_!Yi=kPi>vNY?3s$H7bve~X>_np2rz*(N$H8@oFu?t zSI`7cN3=J#i7WO%heVh4A#OIjdN~w4Hw*xcjdFBct@3i7B9z6eGC}4Y8=kuw&dWFj zBJ8ZDv(Igf_{ED_Tkz~7dfQ1-0Ce48RK6PwoCcYCW!O@P<_JDCPGe7QNX~%0N<{R4 ztO@YJi|E>=E0+>(O;mj$5V(4w`fz28nwAr@Kr@DS#Q`Yt=xM3vS@E$nVT-|TAw|b%{a1P9fZNrLav>(!08M8BKy=BElr*nk~Go$fOFU zYiq0zhzrcvrk!b7kBRNfbT);IR#ji_48~7a3zhy6Zn0DV<489|Wm4kvV36vccFUL6 zz+#=3z{GZH1W&1$!varncBXV#<*rfHX5$wHRmSm2LE30uXoG0DEfYXPm7tZSHL$n} zM9gh@8Y`BJm=IKo{@{gk)!vFP&QaqKER;oA(an_FC&}|=oU@V2;DU%J1W9sPC|2LQ zG-nEfE#n$I4xn7_%M209ytgz#iC%5bVj;gJ@>&rMrRBH4p1lUT<2KF-u3Ngb;cQ5y zvm@|QezV)WT#aG=zjKyi{=aK_X8wQM z>mQTp|2Sxew*7zV zTa0cerILgZEH;F|(?!QVvFa#I^3;~7! zLx3T`5O^#EhW$&vHwf@k*HDZuPytV*D86?sZ=oaY}11fBJ#d{e;HP+bX= zlur*l4E5~u{xM%NUj|yB23$3alJVDS|DPH3&-m`~=Ygqu4~y!W28CrcprjNj2Vs?{ zz=l12#-H>pVPTz8pz>HO5cv{tO{8^Hkfi*j7f<=)K7BjB0HlB|q*KHP=o9su3ea*1 z5-BxP|K^2SX+TiaFA?m{uOk8I`v`arep1qb{6SA8BFwgAngSIVGo_0Z7dCsp!@$J-+O_`2jPj{--ccZT+xtA8UxQ%twL1?r48784g!dd&?J^ z4^v=}Jk(%R@ak5LjSsY@B5ZCr*fQUd$*{hOYA2*S%SJ+zRaKYbnw`Sp*mxDxP!1ZJ z1N8_GTy|9r$il`0lOm{2U8&YW15jGb17CjoVhHIkXM?qm1F9pr7k)0735WM`JBwqj<^We0UA4N%731OAF}8FxiTCi#Md|pa6y(cN4g+az z0_O{aQu;~)@GhyK?k@*7=ixEMO05Evp2!~%2Au^rpyCHj&6jsxkqLOYnadB#mfC>0_ov!_0_A~erAlrs#!=* z)mLj2#;bVRc_7Xp`kqOw++I1DErk_(^N7weX3`$Km6t(=P<(be;XR%1#M#c zrc5mgJqIc7`c4M!4us$C9|YE7D;v%*?i!v0U^xOK6o~qQMtbp`sCuxbqj7rWh1nz+ z&uA!FBAWmgO_Z5}_!^ln)vosI7q8+R!BhmIsc0Y2LYt7%=OFq;g&+hYm04SJ($lj} z@}fYt(83yc0lg z)GFA<3iu~DFQEl#3(di^B>~M78XE?^r(zYjud(q*u?zu+A~p`2q<18he+%aS>nP2O zYXnLZQ4w5`?-6tZWmAi2=vwVll~gQHbsK}&9F10P9`iy$6RnsXqtke0hdU7*9;+@@ z2bMXvjXrrJg=TpOtPsItfY$0!OE#%B4dmRCn_}(BS!yq`DJ4N1o8sp2JLttOmh6F} zn<$yMl}uX1bLgTLqGU)CBm|ETyesMwCY2l!Y0$S76A7DhwOBG2j6)_yl%P@z{~q4) z_XS@XsjgJduW+_c3A?cT3xQ5{3ciLib8yZqC%V+ zj7jL>nvZIChaJa;G7HX5u^v<3BRARz(YiMqPqZ#9S;o{sUvmkA^SPdc)P~+Th|oJC zD50FzaSEe4ZQl#R>aA$-!f-WPAy>INN8d5?Ws>)7tlJFsnZvN80g=g$_z#CRadk(# z1gHbXw9w$`{idtO=z<2@01%@7zd!IP7y4&-EAVOHA3dvGKk9tH^Zlc6UXQfQw+qjQ zlHlM_7w4=#4zcb})~$kpMA#nh(K|QPC^VcKD^j~=tK8OL(U2E(FZ^rZ+%TwNDaNsK zVR)=h*pIxei3Kn^^wsWz`H_dpsr!+K%Bkbx%4z$Nz3+5_RweBv<)>$jzF{4_$5P~D%t&O4oNkcW3dEiQjz*Cq$E32?`9g3E zObXEHV_z4Y?)1HE)So7MA|=7%EIn2P=px?Q+S0YQFzNQhp>pbCc&MDZ0qx3Z8_=*% zX0^ib$>~}C^sImS?vDH~`f(%YKk^~v`!lY;ff)N>2rvW~0t^9$07HNwzz|>vFa#I^ zUu^^!|NpDT{}26;>*_wk1-3)~={|GpXHoit0PMvOU6JDXnIAxcV^LJPh`671|xC%&$vjl-?`} zl3b(W(n#DU3dQPTGhYqdCaGmMev`ZKq%!YPnH!Bu<=iKR_{>aMW6MJSm zQfF0gU$L_}Ax*f#EhhOIGajO&y?#%?j%R5auW8lN8qj9^LNm?dk)sC3a>)A1DIt2S zJm`p>`Llr(OhHqRQv1Z=yTrnwrW=B;THsQ91ZYPH@2}}d;0UJk`p-o*(EygdaOSNk z%){k1mHFXv*L3gU@|wdIQP`|jH{%1<+I!zVKmim^4LRsG2=(2kyTG*mv2IsDAzz|>vFa#I^41uQsflBDvo{@MToT$+9K!rCOVmm+YBNZyk&-A2+``|!@_Rmvj ztkswIM1|X@x(ECF-W;qyPQjxMEe}-K?Ks(Ucc2fBQ)v4%1&_zTIs`jU;psh3q56Xp z0pm0Uc9=r##1pUeG{?CdpZj479en}gFa>s&g7c@O>ES0&>?{T8c)&PIfgPpb^}F82 LX+WRfQ40SD7CPvR delta 1162 zcmeH`&ubGw6vuZqo86h&>`c=iNn;wL)L3KPE=vieGTA6>KSOibSGG~z%1U*VG^;Sd=B9Xw;J_Q+_dR&;@tHUCEBgG3 zzMPI5nx-LT5oMu|AD`)LGPI7FF-Iw#>}j+>_Q)DplYK)I4rZl@mGnHoyG5_l2263s znG-c9W%e0na?leSwE5)Z_{eZDRlYkGOx+kBDF=Sw{}Jjp#0z@Xw%9pU&-Vc@iXD;{ zB{CQB*7bxzf5v{z8&z7DjYD5(kMgKi(BLYaArGB$tYTlm zz37CsVLpnE8pm`Asw#c>@Bs?j^ZYU^cgl@RJ;3HZfqokgnCHsb_-TME4lK6v`>g88 z_4=CtUx>kcH^0cP_RDNz3E+$k3mHDhvN<{0lmOVnFqc=lt00#XrvM6&l~MWbyx2@` zqbjg64b1nmV$qw%JO!=Jc0L|-$*0W?0L3jUr+Ux1ax-NE++adCt4c+ExqT!C&~(%) zr1{|WoY+l&#jOT(GyFD7dh&Bi3&0~0*q-Ay1Fon)`VmER>v)p6eyaf4*@Octnq}^5 z=0154tKo0>8G4P1>+HQLmzE|#xB+k7IP)E`wQvtBwNuK+dC?I=i|6H=g;!>82pZ6X z5Ferku@CkqyoFxE)qe=@JM_1B9(u>glwtyDNG(A;jdqadbbzjsTlCtY#iUhIBlthL K-+sW8`MMu@@*E8S diff --git a/llm_rag_knowledge/wikelo_crafting_information_part_2.json b/llm_rag_knowledge/wikelo_crafting_information_part_2.json deleted file mode 100644 index bf67878..0000000 --- a/llm_rag_knowledge/wikelo_crafting_information_part_2.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "contracts": [ - { - "name": "Armor with Horn and String", - "items_needed": [ - { "quantity": 30, "item": "Saldynium (Ore)" }, - { "quantity": 15, "item": "Carinite" }, - { "quantity": 45, "item": "Jaclium (Ore)" }, - { "quantity": 1, "item": "Carinite (Pure)" } - ], - "reward_items": [ - { "quantity": 1, "item": "Ana Armor Helmet Endro" }, - { "quantity": 1, "item": "Ana Armor Core Endro" }, - { "quantity": 1, "item": "Ana Armor Arms Endro" }, - { "quantity": 1, "item": "Ana Armor Legs Endro" }, - { "quantity": 1, "item": "Ana Armor Core Endro" }, - { "quantity": 1, "item": "Ana Armor Arms Endro" }, - { "quantity": 1, "item": "Ana Armor Legs Endro" } - ] - }, - - { - "name": "Look at desert but don't see you", - "items_needed": [ - { "quantity": 3, "item": "Wikelo Favor" }, - { "quantity": 5, "item": "Ace Interceptor Helmet" }, - { "quantity": 20, "item": "Advocacy Badge (Replica)" }, - { "quantity": 1, "item": "ADP-mk4 Core Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Arms Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Legs Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Helmet Woodland" } - ], - "reward_items": [ - { "quantity": 1, "item": "DCP Armor Helmet Hunter Camo" }, - { "quantity": 1, "item": "DCP Armor Arms Hunter Camo" }, - { "quantity": 1, "item": "DCP Armor Core Hunter Camo" }, - { "quantity": 1, "item": "DCP Armor Legs Hunter Camo" } - ] - }, - - { - "name": "Want armor look like tree?", - "items_needed": [ - { "quantity": 3, "item": "Wikelo Favor" }, - { "quantity": 5, "item": "Ace Interceptor Helmet" }, - { "quantity": 50, "item": "Valakkar Fang (Juvenile)" }, - { "quantity": 1, "item": "ADP-mk4 Core Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Arms Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Legs Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Helmet Woodland" } - ], - "reward_items": [ - { "quantity": 1, "item": "DCP Armor Helmet Jungle Camo" }, - { "quantity": 1, "item": "DCP Armor Arms Jungle Camo" }, - { "quantity": 1, "item": "DCP Armor Core Jungle Camo" }, - { "quantity": 1, "item": "DCP Armor Legs Jungle Camo" } - ] - }, - - { - "name": "Make space navy armor", - "items_needed": [ - { "quantity": 3, "item": "Wikelo Favor" }, - { "quantity": 5, "item": "Ace Interceptor Helmet" }, - { "quantity": 50, "item": "Grassland Quasi Grazer Egg" }, - { "quantity": 1, "item": "ADP-mk4 Core Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Arms Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Legs Woodland" }, - { "quantity": 1, "item": "ADP-mk4 Helmet Woodland" } - ], - "reward_items": [ - { "quantity": 1, "item": "DCP Armor Helmet Cobalt Camo" }, - { "quantity": 1, "item": "DCP Armor Arms Cobalt Camo" }, - { "quantity": 1, "item": "DCP Armor Core Cobalt Camo" }, - { "quantity": 1, "item": "DCP Armor Legs Cobalt Camo" } - ] - }, - - { - "name": "Make glowy armor", - "items_needed": [ - { "quantity": 1, "item": "Irradiated Valakkar Pearl (Grade AAA)" }, - { "quantity": 2, "item": "Irradiated Valakkar Fang (Apex)" }, - { "quantity": 15, "item": "Irradiated Valakkar Fang (Adult)" }, - { "quantity": 20, "item": "Irradiated Valakkar Fang (Juvenile)" } - ], - "reward_items": [ - { "quantity": 1, "item": "Ana Armor Helmet Endro" }, - { "quantity": 1, "item": "Ana Armor Core Endro" }, - { "quantity": 1, "item": "Ana Armor Arms Endro" }, - { "quantity": 1, "item": "Ana Armor Legs Endro" } - ] - }, - - { - "name": "Walk in danger. Look good.", - "items_needed": [ - { "quantity": 30, "item": "MG Scrip" }, - { "quantity": 1, "item": "Novikov Exploration Suit" }, - { "quantity": 1, "item": "Novikov Helmet" }, - { "quantity": 10, "item": "Irradiated Valakkar Fang (Adult)" }, - { "quantity": 20, "item": "Irradiated Valakkar Fang (Juvenile)" } - ], - "reward_items": [ - { "quantity": 1, "item": "Irradiated Valakkar Pearl (Grade AAA)" } - ] - }, - - { - "name": "Xi'an Xanthule Suit made better", - "items_needed": [ - { "quantity": 20, "item": "MG Scrip" }, - { "quantity": 1, "item": "Xanthule Suit" }, - { "quantity": 1, "item": "Xanthule Helmet" }, - { "quantity": 15, "item": "Ace Interceptor Helmet" }, - { "quantity": 1, "item": "Tevarian War Service Marker (Pristine)" } - ], - "reward_items": [] - }, - - { - "name": "Adventure a A-Venture", - "items_needed": [ - { "quantity": 30, "item": "MG Scrip" }, - { "quantity": 1, "item": "Venture Arms" }, - { "quantity": 1, "item": "Venture Core" }, - { "quantity": 1, "item": "Venture Helmet White" }, - { "quantity": 1, "item": "Venture Legs" }, - { "quantity": 10, "item": "Saldynium (Ore)" }, - { "quantity": 10, "item": "Jaclium (Ore)" }, - { "quantity": 1, "item": "Carinite (Pure)" } - ], - "reward_items": [] - }, - { - "name": "Geist \"Snow Camo\" Armor Set", - "items_needed": [ - { "quantity": 10, "item": "ASD Secure Drive" }, - { "quantity": 1, "item": "Geist Armor Arms ASD Edition" }, - { "quantity": 1, "item": "Geist Armor Core ASD Edition" }, - { "quantity": 1, "item": "Geist Armor Helmet ASD Edition" }, - { "quantity": 1, "item": "Geist Armor Legs ASD Edition" }, - { "quantity": 1, "item": "Geist Armor Backpack ASD Edition" } - ], - "reward_items": [ - { "quantity": 1, "item": "Geist \"Snow Camo\" Armor Set" } - ] - }, - - { - "name": "Zenith \"Snow Camo\" Laser Sniper Rifle", - "items_needed": [ - { "quantity": 10, "item": "ASD Secure Drive" }, - { "quantity": 1, "item": "Zenith Laser Sniper Rifle" } - ], - "reward_items": [ - { "quantity": 1, "item": "Zenith \"Snow Camo\" Laser Sniper Rifle" } - ] - } - ] -} diff --git a/llm_tools/star_citizen_info_retrieval.py b/llm_tools/star_citizen_info_retrieval.py index 1865a39..05496ef 100644 --- a/llm_tools/star_citizen_info_retrieval.py +++ b/llm_tools/star_citizen_info_retrieval.py @@ -824,7 +824,7 @@ class Tools: async def fetch_wikelo_information( self, - mission_ship_name: str, + mission_ship_or_armor_name: str, __event_emitter__: Callable[[dict], Any] = None, ): """ @@ -848,7 +848,7 @@ class Tools: try: await emitter.progress_update( - f"Searching Wikelo database for '{mission_ship_name}'" + f"Searching Wikelo database for '{mission_ship_or_armor_name}'" ) # ------------------------------------------------------------------ @@ -858,7 +858,7 @@ class Tools: cursor = conn.cursor() cursor.execute( """ - SELECT missions, ship_name, components, costs, rewards + SELECT missions, ship_name, components, costs, rewards, armor_name FROM Wikelo_information """ ) @@ -876,21 +876,22 @@ class Tools: # ------------------------------------------------------------------ search_items = [] # List of tuples: (search_string, label, full_row) for row in rows: - mission, ship_name, components, costs, rewards = row + mission, ship_name, components, costs, rewards, armor_name = row search_items.append((mission, "mission", row)) search_items.append((ship_name, "ship", row)) + search_items.append((armor_name, "armor", row)) # ------------------------------------------------------------------ # 3. Find the best fuzzy match against all searchable strings. # ------------------------------------------------------------------ best_match = process.extractOne( - mission_ship_name, + mission_ship_or_armor_name, [item[0] for item in search_items], ) if not best_match: - await emitter.error_update(f"No close match found for '{mission_ship_name}'.") - return f"No close match found for '{mission_ship_name}'." + await emitter.error_update(f"No close match found for '{mission_ship_or_armor_name}'.") + return f"No close match found for '{mission_ship_or_armor_name}'." matched_string, score = best_match @@ -910,13 +911,14 @@ class Tools: # ------------------------------------------------------------------ # 5. Build the output string. # ------------------------------------------------------------------ - mission, ship_name, components, costs, rewards = matched_row + mission, ship_name, components, costs, rewards, armor_name = matched_row result_text = ( f"**Mission:** {mission}\n" f"**Ship Name:** {ship_name}\n" f"**Components:** {components}\n" f"**Costs:** {costs}\n" - f"**Rewards:** {rewards}" + f"**Rewards:** {rewards}\n" + f"**Armor Name:** {armor_name}" ) await emitter.success_update( @@ -931,4 +933,4 @@ class Tools: if __name__ == "__main__": info_printer = Tools() - asyncio.run(info_printer.fetch_wikelo_information("Nox")) + asyncio.run(info_printer.fetch_wikelo_information("Space Navy"))