From 64512c79bedb12ac0612b8ca0e357567e23c5f58 Mon Sep 17 00:00:00 2001 From: Alex Leventer <3254549+alexleventer@users.noreply.github.com> Date: Wed, 8 Oct 2025 13:21:04 -0700 Subject: [PATCH 1/2] Do not check in .DS_Store --- .DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index ca39b6e347a514559b8ebc1e3e1057a1eda59931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMU2GIp6h7Zl=uF4L6k4`GSXYVxb%C}trTn`6LFKndTUyG`vfCNx$aJRc%_M#0P(ZPewg=?ku6DyeLtObCbDe z?z!i?bI+OY%gC!VGG(sjh z3RVY=@3{^LFv(D+Lpd&G0Od7h^?(qHu*86b^L$d6vrLC_TuKQiNH`&UGQtW4!P6O+ z49p2>DWg7$Koo)NBOq#bl?-xehzi%%@7`$6c5^&?E;njhp5NH`1!B`Grq8HUDiuxH z*E8&vdi<jJz~`Bx^}L7pUv&E%u+_L?Q|VKYdK~<09b~}CVTrW$8bv>Zox6U z0NW!c6jf0(di~f~%gW|dvZb}@L@GJ9y17x@x12bkDs>Gj*6z$4wnrTIlynB+2Z5?5 zIrsR~p4ncpQ+gKrt?b#QvS(_Qc3Zr+s!yvLu!dZx$2x9i^jRJ|w~2>4@@A2p>K}6L z!ieK#^qQfpJyfu>zS(Zu!kBflg-Q3QZ@G@Q%glQ$2YmCWFQx}QH}7`_=!~uxJaebX zV5?|$@eaNlo z6=l#H&gRYT64R=T*rX`It75%?Y&0z2El(!4DavlKSi52HIyJNOnceXRbG(4$tESyoj@S8|Uy2KEwrlf=}@czQ<+!fM4-PY<6r;tS&Y;7LP5BEt5XP z%GuFB(WlsQ9#4_?oE>4_#|l$sN8EAblcrDObW#IsOCqJ|P~@OZTcha}oLF+WUb|P*N#wK~cO<$J zx=541LfE(HUHXU#dx;5qnSP`zs6aL5U?J1<9xTIhG@%)5u^tlkr^&}o;x}L&QcpA^(G@iv7yo^`yDqh3uIFI)x(Q@-dTH^hw zX<6*aJGSc_;#ooH>2#26KC(*Uhvt9xplWSel}fH``@09#H6Bg!bz*>S>S&r=tzOjs z8*lvk|4n^nv{)2@C<3=u1W?h{)78OyD*v%Cd3&PPPV#ktFVTeExRe2eyPzCr8I Date: Wed, 8 Oct 2025 17:59:30 -0300 Subject: [PATCH 2/2] Added validation for api keys --- src/services/models_service.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/services/models_service.py b/src/services/models_service.py index 8c779940..01707dd2 100644 --- a/src/services/models_service.py +++ b/src/services/models_service.py @@ -242,6 +242,35 @@ class ModelsService: headers["Authorization"] = f"Bearer {api_key}" if project_id: headers["Project-ID"] = project_id + + # Validate credentials with a minimal completion request + async with httpx.AsyncClient() as client: + validation_url = f"{watson_endpoint}/ml/v1/text/generation" + validation_params = {"version": "2024-09-16"} + validation_payload = { + "input": "test", + "model_id": "ibm/granite-3-2b-instruct", + "project_id": project_id, + "parameters": { + "max_new_tokens": 1, + }, + } + + validation_response = await client.post( + validation_url, + headers=headers, + params=validation_params, + json=validation_payload, + timeout=10.0, + ) + + if validation_response.status_code != 200: + raise Exception( + f"Invalid credentials or endpoint: {validation_response.status_code} - {validation_response.text}" + ) + + logger.info("IBM Watson credentials validated successfully") + # Fetch foundation models using the correct endpoint models_url = f"{watson_endpoint}/ml/v1/foundation_model_specs"