def add_new_model(): import streamlit as st import json, requests, uuid model_name = st.text_input( "Model Name - user-facing model name", placeholder="gpt-3.5-turbo" ) st.subheader("LiteLLM Params") litellm_model_name = st.text_input( "Model", placeholder="azure/gpt-35-turbo-us-east" ) litellm_api_key = st.text_input("API Key") litellm_api_base = st.text_input( "API Base", placeholder="https://my-endpoint.openai.azure.com", ) litellm_api_version = st.text_input("API Version", placeholder="2023-07-01-preview") litellm_params = json.loads( st.text_area( "Additional Litellm Params (JSON dictionary). [See all possible inputs](https://github.com/BerriAI/litellm/blob/3f15d7230fe8e7492c95a752963e7fbdcaf7bf98/litellm/main.py#L293)", value={}, ) ) st.subheader("Model Info") mode_options = ("completion", "embedding", "image generation") mode_selected = st.selectbox("Mode", mode_options) model_info = json.loads( st.text_area( "Additional Model Info (JSON dictionary)", value={}, ) ) if st.button("Submit"): try: model_info = { "model_name": model_name, "litellm_params": { "model": litellm_model_name, "api_key": litellm_api_key, "api_base": litellm_api_base, "api_version": litellm_api_version, }, "model_info": { "id": str(uuid.uuid4()), "mode": mode_selected, }, } # Make the POST request to the specified URL complete_url = "" if st.session_state["api_url"].endswith("/"): complete_url = f"{st.session_state['api_url']}model/new" else: complete_url = f"{st.session_state['api_url']}/model/new" headers = {"Authorization": f"Bearer {st.session_state['proxy_key']}"} response = requests.post(complete_url, json=model_info, headers=headers) if response.status_code == 200: st.success("Model added successfully!") else: st.error(f"Failed to add model. Status code: {response.status_code}") st.success("Form submitted successfully!") except Exception as e: raise e def list_models(): import streamlit as st import requests # Check if the necessary configuration is available if ( st.session_state.get("api_url", None) is not None and st.session_state.get("proxy_key", None) is not None ): # Make the GET request try: complete_url = "" if isinstance(st.session_state["api_url"], str) and st.session_state[ "api_url" ].endswith("/"): complete_url = f"{st.session_state['api_url']}models" else: complete_url = f"{st.session_state['api_url']}/models" response = requests.get( complete_url, headers={"Authorization": f"Bearer {st.session_state['proxy_key']}"}, ) # Check if the request was successful if response.status_code == 200: models = response.json() st.write(models) # or st.json(models) to pretty print the JSON else: st.error(f"Failed to get models. Status code: {response.status_code}") except Exception as e: st.error(f"An error occurred while requesting models: {e}") else: st.warning( "Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." ) def create_key(): import streamlit as st import json, requests, uuid if ( st.session_state.get("api_url", None) is not None and st.session_state.get("proxy_key", None) is not None ): duration = st.text_input("Duration - Can be in (h,m,s)", placeholder="1h") models = st.text_input("Models it can access (separated by comma)", value="") models = models.split(",") if models else [] additional_params = json.loads( st.text_area( "Additional Key Params (JSON dictionary). [See all possible inputs](https://litellm-api.up.railway.app/#/key%20management/generate_key_fn_key_generate_post)", value={}, ) ) if st.button("Submit"): try: key_post_body = { "duration": duration, "models": models, **additional_params, } # Make the POST request to the specified URL complete_url = "" if st.session_state["api_url"].endswith("/"): complete_url = f"{st.session_state['api_url']}key/generate" else: complete_url = f"{st.session_state['api_url']}/key/generate" headers = {"Authorization": f"Bearer {st.session_state['proxy_key']}"} response = requests.post( complete_url, json=key_post_body, headers=headers ) if response.status_code == 200: st.success(f"Key added successfully! - {response.json()}") else: st.error(f"Failed to add Key. Status code: {response.status_code}") st.success("Form submitted successfully!") except Exception as e: raise e else: st.warning( "Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." ) def streamlit_ui(): import streamlit as st st.header("Admin Configuration") # Add a navigation sidebar st.sidebar.title("Navigation") page = st.sidebar.radio( "Go to", ("Proxy Setup", "Add Models", "List Models", "Create Key") ) # Initialize session state variables if not already present if "api_url" not in st.session_state: st.session_state["api_url"] = None if "proxy_key" not in st.session_state: st.session_state["proxy_key"] = None # Display different pages based on navigation selection if page == "Proxy Setup": # Use text inputs with intermediary variables input_api_url = st.text_input( "Proxy Endpoint", value=st.session_state.get("api_url", ""), placeholder="http://0.0.0.0:8000", ) input_proxy_key = st.text_input( "Proxy Key", value=st.session_state.get("proxy_key", ""), placeholder="sk-...", ) # When the "Save" button is clicked, update the session state if st.button("Save"): st.session_state["api_url"] = input_api_url st.session_state["proxy_key"] = input_proxy_key st.success("Configuration saved!") elif page == "Add Models": add_new_model() elif page == "List Models": list_models() elif page == "Create Key": create_key() if __name__ == "__main__": streamlit_ui()