From 7b22915153a6df74c1a3d383f3b703d43cf932ba Mon Sep 17 00:00:00 2001 From: irrlicht Date: Sun, 30 Aug 2026 19:03:53 +0200 Subject: [PATCH] API Key checking --- __pycache__/chat.cpython-314.pyc | Bin 7543 -> 7734 bytes __pycache__/tui.cpython-314.pyc | Bin 11975 -> 0 bytes chat.md | 4 ++++ chat.py | 9 ++++++--- 4 files changed, 10 insertions(+), 3 deletions(-) delete mode 100644 __pycache__/tui.cpython-314.pyc diff --git a/__pycache__/chat.cpython-314.pyc b/__pycache__/chat.cpython-314.pyc index 290f5b999d77cc5174a683cfece02e97c4ba984d..49ac2a71541a72971d5742021199a1e4acc007ac 100644 GIT binary patch delta 1956 zcmaJ>&2JM&6rZuz_Il%W94G!tV&afb2kd+(1QIAp0)e=RoOIi&R7zNky(A{~+M1mp zKB{6>s#GcvL_;qXJyfbHxPemj+yj3Ag&xoX5>?epPo-b9x4s#N(w3Hy_RZUQ^XC2D z@4cC)6JPH0@9?V%g7N6+)sqX28~*6gcQHaaR6|-Uf@pjQQKTV?k0K3c9MmCZCv}Qh zq7uxGjBD0S-5m&YXT~!tQ(5Rz#yhJ}r2}a$+Mv0qPxDZ9<4(ADv4cna=g?%$JL;&f z(ZI5Ear;IsMvw(E^}1 z2|cO>L2nj%Oltu>B=lA-40=T9ZOiRibk7ll3cyJ_T5jt^qgyZ`2JRAHvNd-LqfHav z#f$B$lvXDO2ZzT;(!*nW;2TblPK?7ecxw1;<4UQV+LazjV}D(lj4iB!mob7(PQK?)@Lin! zTCGMJ*llkQ9%DavUvZ1pX3e0AX=_ zy$KkTlaqCNlxmJxhMr%|Q8EJ7q0O603QyPbujc5gNGBRMZHHmS-S^Tf`xQ%mj zn05GeV3p1Jz8d4_+FoMh3OZ*L-1v16Z1&bssHF-R%Z6p;Rt$^m6$ebI6L7#g>M4On z_=qe>Cz$IjCmqjmy$ns3jr#XOk*fZiSmorC-5_j4wzE_q;vVNK6YSN%P_PHor0eg& z*u_91Dq6{xt5yxOpdT+)@@wP}?98&;flC1Lnk&ZEn(|Yk{(^4a1i;!~ToGPJ0rq7$ zkFdrdu(r83n04Sj_F+pK4zbT$rrUYSwtAvy7Ohnsn1rhXC`F_>CWU&o09q7mW!O+H zogr_5&ymfk5XQZ69{m40lG}L6%4{{<4#D3Kf8#@$EMQ(Fj6fQ9l#E@?8@2T_1VcITeG-}z-6~iQNus>q)fZ$Xr=ZYpN z!H)7~Z!5(fPGOcbu}|9u!Y^DNun`~owk9L5{JV?K{s0`6&xr2-qIOJXItWlS89~zmB#iUny6MCBs%S zhqDXX%mH{|$PVr?$wdYrr6Jz|F1iAd&jj-|nc^@F<5sE%SZQrBV#QED4vq|WAP_}L7RsF delta 1780 zcmaJ>O>7fK6rNe{uKyj|!SPS*#34V$CB{x5kft-RShf0UXo4LYj<`) zkPB8%tyCnUp;vn8rI!{OiJp)+v?o-lp*^4lBvh&Q(m$wr>6>v{D$z2Q-#ooH@4fGR zGjDGmd@>c;9SH{ztdn1Fto{($h@{@0#t2nW8)?ZTqUkcCNJA8#K^m?|R1&*~dSI6- z@-c-f{RnhVMLp)FUZKks-!VV+_ajZA0ZpYr%}Yaz(n4nAc0%!ilHG87m9D=n{%y;p zsD_=`B4k^`5F1D$Eto`Bl*Y9X=wYFEYZ1`9guX+If*uokLW_gmE%Y932j~f*Cl^y% z&*WPO)uGEQT1*b0eY{;*Py-K&e<4-9fzjq?_%1G`Rw!*vl}cmd2lkZVH#Rj{E|*K^ z$JV=+twwQT&v>!cw9F-9nn*^7ee1cAE|ylB4WncdVwtrST3R5@Rb!1BC3a07>I*`x zVfZ`UAlm2&QgHWUF0QJuu}5+)J|jHufb6WZan_}z`ZTOb2c(Y4LC@TSsNh*Y%#JI$ zN`9BsT&r3J$se`rt#kGo9nH@!REl%P#r%?CnZ}a2T-dW7u$#1K8%Euz7bMrWRCNsf z9I;$)wPosS#>Ik%eWRqNKSd-2X+NQIj1CdVC29%;wghd$LeGk^D#s9|Qx8mcQrh*#O^j#Dc@ zyFOjFs|`cf1%+_8ys~)N+wN?%dt!~Yj~AbQgP diff --git a/__pycache__/tui.cpython-314.pyc b/__pycache__/tui.cpython-314.pyc deleted file mode 100644 index aad3f6b2bbe3990a9affbf861574ae4b289b52d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11975 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 diff --git a/chat.md b/chat.md index 3596579..0eb4a48 100644 --- a/chat.md +++ b/chat.md @@ -6,4 +6,8 @@ Nutze nur dann Beispiele, wenn du gefragt wirst. Wenn möglich, antworte in etwa [assistant] Verstanden. +[user] +Kleiner Test, funktionierst du? +[assistant] +Offensichtlich. diff --git a/chat.py b/chat.py index d21a3f0..bf77595 100644 --- a/chat.py +++ b/chat.py @@ -17,6 +17,7 @@ Die Datei ist die einzige Quelle der Wahrheit. Dieses Modul stellt die Bausteine bereit, die auch das TUel (tui.py) verwendet. """ +import os import re import sys from pathlib import Path @@ -24,9 +25,10 @@ from typing import Iterator from openai import OpenAI -BASE_URL = "http://127.0.0.1:8000/v1" +BASE_URL = "http://192.168.161.4:9161/v1" MODEL = "glm-5.2-colibri" MAX_TOKENS = 1024 +API_KEY = os.environ.get("COLIBRI_API_KEY", "not-needed") HEADER_RE = re.compile(r"^\[(system|assistant|user)\]\s*$", re.IGNORECASE) TRAILING_EMPTY_RE = re.compile(r"\n*\[(?:system|assistant|user)\][ \t]*\s*$", re.IGNORECASE) @@ -35,10 +37,11 @@ _client: OpenAI | None = None def client() -> OpenAI: - """Lazy angelegter OpenAI-Client (lokaler Endpunkt, API-Key beliebig).""" + """Lazy angelegter OpenAI-Client. Key aus COLIBRI_API_KEY, sonst Dummy + (der lokale Endpunkt braucht keinen).""" global _client if _client is None: - _client = OpenAI(base_url=BASE_URL, api_key="not-needed") + _client = OpenAI(base_url=BASE_URL, api_key=API_KEY) return _client