Spaces:
Paused
Paused
| 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() | |