add keycloak auth to playground ui
All checks were successful
Build and Push playground container / build-playground (push) Successful in 2m0s
Build and Push container / build (push) Successful in 4m11s

This commit is contained in:
Angel Nunez Mencias 2025-06-01 22:23:49 +02:00
parent ed31462499
commit 3bde47e562
Signed by: angel.nunez
SSH key fingerprint: SHA256:z1nFAg1v1AfbhEHrgBetByUJUwziv2R2f4VyN75opcg
5 changed files with 38 additions and 1 deletions

View file

@ -48,3 +48,6 @@ uv run --with ".[ui]" streamlit run llama_stack/distribution/ui/app.py
| TOGETHER_API_KEY | API key for Together provider | (empty string) | | TOGETHER_API_KEY | API key for Together provider | (empty string) |
| SAMBANOVA_API_KEY | API key for SambaNova provider | (empty string) | | SAMBANOVA_API_KEY | API key for SambaNova provider | (empty string) |
| OPENAI_API_KEY | API key for OpenAI provider | (empty string) | | OPENAI_API_KEY | API key for OpenAI provider | (empty string) |
| KEYCLOAK_URL | URL for keycloak authentication | (empty string) |
| KEYCLOAK_REALM | Keycloak realm | default |
| KEYCLOAK_CLIENT_ID | Client ID for keycloak auth | (empty string) |

View file

@ -50,6 +50,36 @@ def main():
) )
pg.run() pg.run()
def main2():
from dataclasses import asdict
st.subheader(f"Welcome {keycloak.user_info['preferred_username']}!")
st.write(f"Here is your user information:")
st.write(asdict(keycloak))
def get_access_token() -> str|None:
return st.session_state.get('access_token')
if __name__ == "__main__": if __name__ == "__main__":
from streamlit_keycloak import login
import os
keycloak_url = os.environ.get("KEYCLOAK_URL")
keycloak_realm = os.environ.get("KEYCLOAK_REALM", "default")
keycloak_client_id = os.environ.get("KEYCLOAK_CLIENT_ID")
if keycloak_url and keycloak_client_id:
keycloak = login(
url=keycloak_url,
realm=keycloak_realm,
client_id=keycloak_client_id,
auto_refresh=True,
init_options={"checkLoginIframe": False},
)
if keycloak.authenticated:
st.session_state['access_token'] = keycloak.access_token
main()
# TBD - add other authentications
else:
main() main()

View file

@ -7,11 +7,13 @@
import os import os
from llama_stack_client import LlamaStackClient from llama_stack_client import LlamaStackClient
from llama_stack.distribution.ui.app import get_access_token
class LlamaStackApi: class LlamaStackApi:
def __init__(self): def __init__(self):
self.client = LlamaStackClient( self.client = LlamaStackClient(
api_key=get_access_token(),
base_url=os.environ.get("LLAMA_STACK_ENDPOINT", "http://localhost:8321"), base_url=os.environ.get("LLAMA_STACK_ENDPOINT", "http://localhost:8321"),
provider_data={ provider_data={
"fireworks_api_key": os.environ.get("FIREWORKS_API_KEY", ""), "fireworks_api_key": os.environ.get("FIREWORKS_API_KEY", ""),

View file

@ -3,3 +3,4 @@ llama-stack-client>=0.2.1
pandas pandas
streamlit streamlit
streamlit-option-menu streamlit-option-menu
streamlit-keycloak

View file

@ -49,6 +49,7 @@ ui = [
"pandas", "pandas",
"llama-stack-client>=0.2.9", "llama-stack-client>=0.2.9",
"streamlit-option-menu", "streamlit-option-menu",
"streamlit-keycloak",
] ]
[dependency-groups] [dependency-groups]