From 9b37ca42d66cbf7e6b7df1905d37ed9f96e9d2c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cydy0615=E2=80=9D?= <“allenyuan410@gmail.com”> Date: Mon, 16 Feb 2026 09:01:08 +0800 Subject: [PATCH] chore: remove env files and update gitignore for python Remove sensitive environment files from repository tracking and add comprehensive Python ignore patterns including virtual environments, cache files, and environment variables. Also clean up staged __pycache__ binary files. --- .env | 2 -- .gitignore | 17 +++++++++++++++++ backend/.env | 4 ---- backend/__pycache__/llm.cpython-310.pyc | Bin 3962 -> 0 bytes backend/__pycache__/llm.cpython-313.pyc | Bin 5743 -> 0 bytes backend/__pycache__/main.cpython-313.pyc | Bin 6745 -> 0 bytes backend/__pycache__/prompt.cpython-310.pyc | Bin 3565 -> 0 bytes backend/__pycache__/prompt.cpython-313.pyc | Bin 3755 -> 0 bytes 8 files changed, 17 insertions(+), 6 deletions(-) delete mode 100644 .env delete mode 100644 backend/.env delete mode 100644 backend/__pycache__/llm.cpython-310.pyc delete mode 100644 backend/__pycache__/llm.cpython-313.pyc delete mode 100644 backend/__pycache__/main.cpython-313.pyc delete mode 100644 backend/__pycache__/prompt.cpython-310.pyc delete mode 100644 backend/__pycache__/prompt.cpython-313.pyc diff --git a/.env b/.env deleted file mode 100644 index 2516f76..0000000 --- a/.env +++ /dev/null @@ -1,2 +0,0 @@ -VITE_API_URL=/v1/completions -VITE_OCR_URL=/v1/ocr diff --git a/.gitignore b/.gitignore index a547bf3..6916396 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,23 @@ dist dist-ssr *.local +# Python +__pycache__/ +*.py[cod] +*.pyc.* +.python-version +.venv/ +venv/ +env/ +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ + +# Env files +.env +.env.* +!.env.example + # Editor directories and files .vscode/* !.vscode/extensions.json diff --git a/backend/.env b/backend/.env deleted file mode 100644 index 37307ec..0000000 --- a/backend/.env +++ /dev/null @@ -1,4 +0,0 @@ -OPENAI_API_KEY=ollama -OLLAMA_HOST=http://192.168.0.120:11434 -OLLAMA_MODEL=gpt-oss:20b -VLM_MODEL=qwen3-vl:30b diff --git a/backend/__pycache__/llm.cpython-310.pyc b/backend/__pycache__/llm.cpython-310.pyc deleted file mode 100644 index da7d4df205292e7d2dc0ccb4def7cbc02f314f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3962 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 Ee=+*hLjV8( diff --git a/backend/__pycache__/prompt.cpython-310.pyc b/backend/__pycache__/prompt.cpython-310.pyc deleted file mode 100644 index 02c0616355521980fe8c4ead61ebfa93665f257d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3565 zcmZ`+-EQ2*6(+g6(uV$1oH(s-f~jH@-g=j^-8w~8RcK=+h=D{hY#B`y8Nw`Qc9+&H zNzV+mT44ngaQXnfE{aN*d6HiA4feKId4%?=-x-o?*={M2JDlOnIp;gy`B8S|O6cMG z^6!61{(af={zWerulMlsd)(#(58(-4d1HUi_dOBFKs019Xo{w2ec#+`h$YM{yIEgi zbr9V221}wX-otA1|Ez}M5>{JcWwBnL+ZI>E)$dz-OXAv7uk-$okneT;d26@Gm7HHv zJRKH%C=U`bU((VRI*on$rn;K=rTZanvyI2hGfm+?^@iT5Kl9GKb8pLge(f}v1!w-b zXFi+-A~^E&&6$6OxpSEKG8B!o#>_wWVR-Y;Fz2)}YveztQ#!5fd3((Dp~xobNwarw zCz^XdGRWyP=PhG(lFyeD!&O?0=Sw`#Wh&;)7g>^an!16{=F42EY$C-xh)46*5m$x$ z!PD2U^q>0=*Y}?psm=aWO!v2>IkZ{6uhh7gq&+K-?S7xfhd6OR*V#C?Q9hmDI50d- zY;qzGEe97#tXRQs-C){rvoroMrncN8T{oub5N>r{Q^RNe0QZioI53vbK$s1{QK zSxX}cPFm>ek7!#9kC;T%*D?llJCUDa0Fl8f|FmI2u9^QT*bh#dr!C>n8h=Hs%$j&M zW-UCMe_K9Xnk}6L=bod{$uGXm3PvdMlqIQ3Qh5*+h2Xl>_{?l1P0tPGs+4jSYJXi2xp~W zn5A#xLK_I_OFNM=WsjeH{>7tjprT+;pM8O0gmdBkfh4`g65LCNgFHvJD{Nj^Q*Kd-wTg6u`D5;QT+Hd$iWC=mj{RQzP+_kEyH9$YS@AbgK)OIV1BeA;DNPIO{r zmjPTkPOMYV@}YrpmGQ5)lwg!{X#+F~zvNmlT_|bR!+Q~XD)|^=179cUIz?9n!X38r zZ1?fAU3RDP7#kPHLOvHP<;a)FKU2mH%N*fSo1{fn7$&l~7)w(8e#Evj(25cR_T>m< zg2M^f%GmbKuA3#oEC|IF3Bb9?cwC#BO~!Ka?O;KkUq4-o?v#d~7^IplEf#yR}9P9@QTXMj$${=_sEjjGo-QI({cUe5*n#Ujj zlmnaZ_3qzg6m-VLSgwdP$OcBbV<PKXedr9-%JGJ@BU;ENa-N+9sENHliCmA6%5 zEEr{ZA1>)aUjZ9b79ZjT{2f&2}uXCYw<|NhyCn$Ez?LPQuJt+<=n!XDN+V` z2Ef-*IUe$5K_G6z)Qt zPIFoyFUVuW3K9tx$xPmt3cn!dL{soj3H&bxpn5bBF zMJ2Q)J85fz?g7jpLu-w0CosMsnAy9izQz%-gz z&cOt#K?J4ZCsSnkVYIPUeGr!3UT3Rgd?n~eX{k7reoNVExDfftCv10TYiB?0vG3S( z_E|Ay<3t_S@9#?gA5#8E6%d&d_Q7uCI)oC*GDyvm361((B4AP6AbUHTP)ZgBkSWPf zaR8vyP=qHp!q>tVwudJlV7j)mHnh`l-EY|!QfJ#)zR-&{FtN8{_~4CJdhd!xVoWV{ zrYMMu*RnoRBTcRN+YRRBevv4FJ+yce2OH{d+x}I*9Rv@W{|tW9{zrRL{}hwds8XNV zS)MQ1X%1d%YIx@jWakU&x_*?tzaYwW&#rN9Z=lUWbFfMO3mNK#FMHR6k1u_^%$olN DMNl}G diff --git a/backend/__pycache__/prompt.cpython-313.pyc b/backend/__pycache__/prompt.cpython-313.pyc deleted file mode 100644 index 430125b624f374ed7578607e66e856b75f0589c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3755 zcmZu!%WoUU8J{I7ilN?C{6y=FB?qlyk%}$5MP*g7;&)woGsP^;Z5XP*Ixsc#n#4{St-jUJ zcclF)&zSvmgt69uBiw2zs&d`7T4^P9s9e*a)tx7WK8fF(@6kMACHCvigoRaAV}`j# ziLD&o(V4&0>Brfv^NhKPQeuV9dFSb_>YbWltduAwE@PdQU~Gxw+gKrc-+4-jOC714 zEzL4Ez~I86>*w+< z_L}2_sZ^^k(8~5({dOQ6H>|hP!uO?XwNe|N?M|f>`Ki?}9LL+1Rx4rFT76r>31vVN z98YVkEX+-8nemlZ_jTTHw2rO^!nL)%E7uRjK^?&svLjeWv&X(4ICd~{@?dy$@8-eq z$!~{0crpCJH^XPXOdJdhJ(_zs_h|m%{QiZf$NoBhFgX6G@UXCd;hVwJKlHJYiFTR| zjXb*f@aE&2F9(0IU)(P@2hZ$XKNuMOcHs2m&zh;zZynCSVgepd?fxlyS4m$e z$zv5}Vhwo3Q@rk3(%~k&sHsk2m|__$pxI+TW?5$VVC?wQ zvA;~c7@PbujrVpH z7m&6r=)Zh*1zKuh2`z9QzqPt_humD3E`$Z4S>qz$^Jj87tenf|^SRstX}DUGK@^X8 zA%%$y+_D3^49z;&M7B5$T3(Q_1*3jr8Y!}^Y%Qlb+$ig|en%#hh;4nlFaD0SpiPkq z*;_(cT!oGd=CbGWyeLH-?*U?KyK`AkVaMome7UrGx3tR7bt1&;VW6P}GS?NjiNK}} zG7^~`>215A7Y5w&%#e)BXD{S=!GkY|v#`$xOOVSWA=f-!SYC}r2_S^G2tdLi0XP@@ zEmY7&PoM?GveE;~Y@UBAz{(~N7RNu_B}2zF8G5n8ISo8X7w zQ7HL#4VVcUt`_8pFG5?%fZOoV#e4^}xWBe+;>ifFT_2H-ohU}<_@Qg+Fh(vSTCp7m zBD!#!$WKi3iD_ysQ!_Uao8m>bcFx(LC{oO{hx?9)ZWMjM2`1te4RL-PT34FD1;{v` zy_BciL_%*N+dQK4KsOv2X}Kgc!0sYif~$y$ic;fq>6mdQ~!`$%3BB`l8TQ7p>#7a4(Cs`yy8D79)tb z+9W)@4Yez!g@w4-%F4E?(BZd8HN@EL#WSX$$jId=<~WupllU#lhnNH410<2$@!{IY zTfsEET$T>{FG5dC^gx11x>qFffynxr1pMhB--8nxL}j-t-Nf#u7?K1b23x(&X6PHU zF=Awax=DLkiP9(xBBl$^I04k9vbwowS9?&3T$S!!>aGn=cL}Wn^7;sA0 z71`aR*|)-bwr6+8G2FGYYv@!ms#>FxN727OQ~httq_{X94MgQ9b#7}&fdE`hbrThz z-OrfMsV1d5IiNxZ7^NpJvZdwKkK&D8tfP0oIG z5TEg)1b}JJq!LzUHe$ZSTy#FG`46w vn~eLfK75{hUVNVU`wT5wG=4aC#V}6okGC21PtCZ0o{al{7JrP!Bc=WaFr+hX